我刚刚为我的项目添加了一个全新的单元测试目标,并收到以下错误:
错误:没有这样的文件或目录 - 旧的dSYM文件不能被覆盖:old:'/ Users/myuser/Library /Developer/Xcode/DelivedData/MyProject-ajbgwuvijemxwlgvdalbjlgirypy/Build/Products/Debug-iphonesimulator/MyProject.app.dSYM/Content /资源/ DWARF/MyProject的"
有人有主意吗?
为了使用服务Rollbar,必须禁用用于回溯符号化的位码。我还必须将dSYM文件上传到Rollbar。但是,禁用位码时,我在哪里可以得到dSYM文件?通常,我可以在iTunes connect中下载它们(但似乎只有在启用了位码的情况下才能在iTunes connect中下载它们,否则我错了吗?)。如果禁用,则看不到任何下载链接。
我在MacOS上使用CMake为我的C++项目生成Makefile.当我构建一个目标(比如说test/AsyncTest)时,我得到了那个目标,加上一个test/AsyncTest.dSYM/包含以下内容的目录:
test/AsyncTest.dSYM/Contents/Resources/DWARF/AsyncTest
test/AsyncTest.dSYM/Contents/Info.plist
Run Code Online (Sandbox Code Playgroud)
我猜这是调试信息(基于".dSYM"和"DWARF"线索),但我还没有找到一个工具让我检查AsyncTest文件.dwarfdump不认识它.
那么,这个文件究竟是什么?有没有一个工具可以用来转储符号信息(假设它是什么)?当我没有要求时,为什么CMake会产生它呢?我可以不生成它(因为生成的文件是huuuuge)?
好的,所以我尝试自动上传dSYM。我正在按照此官方文档中的说明进行操作:https : //firebase.google.com/docs/crashlytics/get-deobfuscated-reports
我被困在“手动运行上传符号脚本”部分。有3种上传dSYM的方法。我正在尝试遵循第一个-在构建过程中包括以下内容:
find ${DWARF_DSYM_FOLDER_PATH} -name "*.dSYM" | xargs -I \{\} ${PODS_ROOT}/Fabric/upload-symbols -gsp MyProjectFolder/GoogleService-Info.plist -p ios \{\}
现在,我尝试了以下方法:

该脚本放在哪里?
如何查找它是否正在运行?
我已经从 iOS 应用程序的 dSYM 文件中解析出地址、文件名和行号。我基本上有一个将地址映射到文件名和行号的表,这对于调试非常有帮助。
为了获取actual lookup address,我使用崩溃报告中的堆栈跟踪地址并使用此答案中指定的公式:/sf/answers/950321991/。所以像这样的事情。
(actual lookup address)
= (stack trace address) + (virtual memory slide) - (image load address)
Run Code Online (Sandbox Code Playgroud)
我使用该地址并在我的桌子上查找它。我得到的文件名是正确的,但行号始终指向被调用的函数或方法的末尾,而不是调用堆栈跟踪上的以下函数的实际行。
我在某处读到,不记得在哪里,必须取消标记帧地址,因为它们对齐到系统指针大小的两倍。因此,对于 32 位系统,指针大小为 4 字节,因此我们使用 8 字节进行脱标记,使用如下公式:
(de-tagged address) = (tagged address) & ~(sizeof(uintptr_t)*2 - 1)
Run Code Online (Sandbox Code Playgroud)
其中uintptr_t是 Objective-C 中指针使用的数据类型。
完成此操作后,查找就可以工作了,但我必须做一些事情,例如找到小于或等于去标记地址的最近地址。
问题#1:
为什么我必须取消堆栈帧地址的标记?为什么堆栈跟踪中的地址没有指向正确的位置?
问题#2:
有时崩溃报告中似乎缺少帧。例如,如果function1()调用function2()哪个调用function3()哪个调用function4(),在我的堆栈跟踪中我会看到类似的内容:
0 Exception
1 function4()
2 function3()
4 function1()
Run Code Online (Sandbox Code Playgroud)
即使在取消标记之后,(上面第 2 帧)的堆栈跟踪地址function3() …
假设我使用autotools在Mac OS X上用clang构建产品.如何"手动"告诉它使用正确的调试格式和条带到有效的dSYM文件?
是否有dSYM捆绑包和文件的规范?
我们已经从 fabric.io 转移到 Firebase,除了一件事之外,一切似乎都很好。我们使用的是Unity 2019.2.6,目标平台是iOS,目标架构是“通用”。
对于 dSYMs 上传,我将 dSYMs 文件夹从 *.xcarchive 打包到 dSYMs.zip 并通过以下代码将其上传到 Firebase
./upload-symbols -gsp <path_to_plist>/GoogleService-Info.plist -p ios <path_to_dSYMs.zip>/dSYMs.zip
Run Code Online (Sandbox Code Playgroud)
结果,我在终端中看到以下几行:
Successfully submitted symbols for architecture arm64 with UUID <uuid_1> in dSYM: <path_to_unzipped_dsyms>/dSYMs/<myapp>.app.dSYM
Successfully submitted symbols for architecture armv7 with UUID <uuid_2> in dSYM: <path_to_unzipped_dsyms>/dSYMs/<myapp>.app.dSYM
Successfully uploaded Crashlytics symbols
Run Code Online (Sandbox Code Playgroud)
之后,我可以在 Crashlytics 仪表板中看到去符号化的崩溃
但也在 Crashlytics dSYMs 选项卡中,我看到以下内容:
Missing dSYMs
UID <uuid_3> Version <my_version> Status **Optional** Crash count <count_1>
UID <uuid_4> Version <my_version> Status **Optional** …Run Code Online (Sandbox Code Playgroud) 某些代码分析工具要求您将 .ipa 与 .dSYM 文件一起提交。
将 .dSYM 文件与 .ipa 一起发送是否存在应用程序逆向工程的风险?我的意思是,如果有人同时拥有 .ipa 和 .dSYM,他能获得源代码吗?
在使用Xamarin 5.4(build 240)在mac OSX 10.9.4上更新iOS 8之后.
在模拟器应用程序上运行应用程序运行正常.
当我连接我的设备并运行时,我收到以下错误消息.
Error MT5203: Failed to generate the debug symbols (dSYM directory). Please review the build log. (MT5203) (ProjectName)
Run Code Online (Sandbox Code Playgroud)
更新之前它在设备和模拟器上成功运行.
所以神秘的是,我从哪里可以获得DSYM?
此外,我正在使用Fabric/Crashlytics,所以有什么方法可以从Fabric下载DSYM吗?
有没有人在他们的ipa中看过两个dsym文件?(注意:如果有帮助的话,下面的两个文件如下图所示.)我不清楚为什么会发生这种情况,当我象征我的崩溃日志时,行号根本没有匹配.我尝试分别进行符号化,两者都有不同的错误行号.我在Yosemite上使用XCode 6.1.1.感谢您的任何信息!
