美文网首页
iOS crash 文件符号化

iOS crash 文件符号化

作者: 传说中的汽水枪 | 来源:发表于2019-06-17 15:59 被阅读0次

找到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.platformsymbolicatecrash

定义路径

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
  1. 一定要是./symbolicatecrash 而不能是symbolicatecrash
  2. xxx.xxx 是崩溃日志文件,就是一个普通的文本文件
  3. xxx.dsym dsym文件
  4. xxxx.crash 符号化后的日志文件

例外

在执行:

dwarfdump --uuid xxx.DSYM

出现了:

xxx.dSYM/Contents/Resources/DWARF: No such file or directory

原因是:
右击xxx.dSYM显示包内容的时候:

image.png

所以导致在符号化后的日志中,系统库都被正确的符号化了,但是自己的库一个都没有符号化。

这个时候的解决办法就是:

  1. 复制你需要符号化后的dsym,例如:app-study-iPad-dev-adhoc.app.dSYMAFNetworking.framework.dSYM
  2. 使用如下的命令:
./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架构

参考

iOS基础之崩溃日志符号化
iOS app crash日志符号化解析

相关文章

网友评论

      本文标题:iOS crash 文件符号化

      本文链接:https://www.haomeiwen.com/subject/nygafctx.html