找到symbolicatecrash
命令行工具
find /Applications/Xcode.app -name symbolicatecrash -type f
例如对于当前我的电脑出现的如下:
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
复制symbolicatecrash
到一个指定目录,例如:/xxxx/symbol
因为主要是在iOS下,所以
复制iPhoneSimulator.platform
的symbolicatecrash
定义路径
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
如果不定义就会出现:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
准备好崩溃日志文件和dsym
文件
日志文件有可能的扩展名是: .crash
, .ips
,不用更改其扩展名
把日志文件和dsym文件放到同一个文件夹下,例如:/xxxx/symbol
可以通过如下的命令来查看dsym
文件的uuid,然后通过uuid与崩溃日志的uuid进行比较来判断是否匹配
dwarfdump --uuid xxxxxx.DSYM
进入/xxxx/symbol
目录下,并执行:
./symbolicatecrash xxx.xxx xxx.dsym > xxxx.crash
- 一定要是
./symbolicatecrash
而不能是symbolicatecrash
-
xxx.xxx
是崩溃日志文件,就是一个普通的文本文件 -
xxx.dsym
dsym文件 -
xxxx.crash
符号化后的日志文件
例外
在执行:
dwarfdump --uuid xxx.DSYM
出现了:
xxx.dSYM/Contents/Resources/DWARF: No such file or directory
原因是:
右击xxx.dSYM
显示包内容的时候:
所以导致在符号化后的日志中,系统库都被正确的符号化了,但是自己的库一个都没有符号化。
这个时候的解决办法就是:
- 复制你需要符号化后的
dsym
,例如:app-study-iPad-dev-adhoc.app.dSYM
和AFNetworking.framework.dSYM
- 使用如下的命令:
./symbolicatecrash xxx.ips app-study-iPad-dev-adhoc.app.dSYM,AFNetworking.framework.dSYM > xxx.symbol.crash
多个dSYM文件使用,
隔开,这样就能符号化相关库的代码了。
例外 有的时候还出现无法符号化
例如:
Thread 40 name: Dispatch queue: com.apple.root.default-qos
Thread 40 Attributed:
0 libcompiler_rt.dylib 0x3820f660 0x3820b000 + 18016
1 libcompiler_rt.dylib 0x3820f40e 0x3820b000 + 17422
2 libsystem_c.dylib 0x382cf1c4 0x382c1000 + 57796
3 app 0x0060adc8 0x4000 + 6319560
4 libdispatch.dylib 0x3827e5c8 0x38266000 + 99784
5 libdispatch.dylib 0x382775e0 0x38266000 + 71136
6 libdispatch.dylib 0x3827448e _dispatch_root_queue_drain + 386
7 libdispatch.dylib 0x3827589e _dispatch_worker_thread3 + 102
8 libsystem_pthread.dylib 0x383e9da6 _pthread_wqthread + 666
9 libsystem_pthread.dylib 0x383e9af8 start_wqthread + 4
例如 3 这一行,就无法符号化了,这个时候可以使用如下的命令来符号化(只符号化那一行):
atos -o app.dSYM/Contents/Resources/DWARF/app -l 0x4000 0x0060adc8 armv7
其中armv7
换成你的崩溃日志文件中的用到的CPU架构
网友评论