symbolicatecrash不与dSYM合作,但’atos’有效

打扰一下! 有一个问题让我很困惑!

我有Myapp.app.dSYM。 (所有符号都已从MyApp.app中删除并复制到dSYM)

现在我使用symbolicatecrash工具来表示Crashes,它不起作用! hex地址仍然存在。

我的崩溃日志的一部分:

...... 11 MyApp 0x00000001010ac2c8 0x100070000 + 17023688 12 MyApp 0x00000001010b1168 0x100070000 + 17043816 13 MyApp 0x00000001010b10e0 0x100070000 + 17043680 ...... 

所以我尝试使用:

 atos -arch arm64 -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp -l 0x100070000 0x00000001010b1168 

它的工作! Symbolicated!

相关的符号日志可能有所帮助:

 .................fetching symbol file for MyApp--[undef] Searching []...-- NO MATCH Searching in Spotlight for dsym with UUID of 3e8efaf1440131ea99e585fb394a50ea Running mdfind "com_apple_xcode_dsym_uuids == 3E8EFAF1-4401-31EA-99E5-85FB394A50EA" Running mdls -name com_apple_xcode_dsym_paths \/Users\/jenkinsslave\/Documents\/CrashSpider\/dSYM\/com\.xxxxxx\.iphoneclient\/50037\/dsym\/MyApp\.app\.dSYM @dsym_paths = ( /Users/jenkinsslave/Documents/CrashSpider/dSYM/com.xxxxxx.iphoneclient/50037/dsym/MyApp.app.dSYM/Contents/Resources/DWARF/MyApp ) @exec_names = ( MyApp ) Running mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'MyApp.app' || kMDItemDisplayName == 'MyApp' || kMDItemDisplayName == 'MyApp.app')" Running mdfind "kMDItemContentType == public.unix-executable && kMDItemDisplayName == 'MyApp'" Did not find executable for dsym ## Warning: Can't find any unstripped binary that matches version of /private/var/mobile/Containers/Bundle/Application/EA730613-BB85-401F-AAF1-D1436CE22EA6/MyApp.app/MyApp 

我的问题是:

  1. 如果dSYM包含Debug Symbols,为什么它需要可执行二进制文件?

  2. 为什么我可以手绘符号,但Xcode的符号不是?

THS!

symbolicatecrash是一个内部调用atos的perl脚本。

您可以从https://github.com/bitstadium/QuincyKit/blob/develop/server/local/symbolicatecrash.pl (或您的XCode安装目录)中获取代码。

将其复制到某处并进行编辑以更改该行:

 print STDERR "Did not find executable for dsym\n" if $opt{v}; return undef; 

将undef更改为/path/to/your.app.dSYM/Contents/Resources/DWARF/YourAppName

然后再次运行它会得到正确的输出。 通过一些更多的工作,您可以编辑脚本以自动执行此操作或使用其他参数而不是使用mdfind …