symbolicatecrash 不适用于 dSYM,但 'atos' 有效
symbolicatecrash not working with dSYM, but 'atos' works
对不起!有问题困扰我!
我有 Myapp.app.dSYM。 (所有符号已从 MyApp.app 中剥离并复制到 dSYM)
现在我使用 symbolicatecrash 工具来符号化崩溃,它不起作用!十六进制地址仍然存在。
我的部分崩溃日志:
......
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
成功了!已符号化!
相关符号化日志可能有帮助:
.................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
我的问题是:
如果dSYM已经包含调试符号,为什么它需要可执行二进制文件?
为什么我可以手动符号化,但 Xcode 的符号化崩溃却不行?
太棒了!
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...
对不起!有问题困扰我!
我有 Myapp.app.dSYM。 (所有符号已从 MyApp.app 中剥离并复制到 dSYM)
现在我使用 symbolicatecrash 工具来符号化崩溃,它不起作用!十六进制地址仍然存在。
我的部分崩溃日志:
......
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
成功了!已符号化!
相关符号化日志可能有帮助:
.................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
我的问题是:
如果dSYM已经包含调试符号,为什么它需要可执行二进制文件?
为什么我可以手动符号化,但 Xcode 的符号化崩溃却不行?
太棒了!
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...