紧接着博客 iOS Crash: symbolicatecrash 工具 继续关于 iOS Crash 的问题.
我们知道, 查找 crash 问题的关键是要有符号表即 dsym 文件.
并且, app 的 UUID 和 dsym 文件的 UUID 必须要保持一致, 才有意义.
dsym 文件其实也没那么神秘, 他就是包含了我们的调试信息, 全名是debug symbols.
使用 GCC 编译代码的同学比较清楚, 在GCC 编译代码, 加入 -g 选项, 就会加入调试信息.
一旦程序出了问题, 可以方便定位.
这个就类似于 debug symbols.只不过苹果使用的是 LLVM 编译器.
关于这两个编译器, 大家可以咨询 google 老师, 还蛮有意思的.
~~不好意思, 跑题了.
还是使用 dsds 这个项目的 crash 来举例子.
凡事举个例子, 更容易让别人接受.
假设, crash_file 目录下面只有 dsds.app
这个时候, 你想找到对应的 dsym 文件, 应该怎么做呢?
很简单, 两个步骤:
1. 使用 dwarfdump 查看当前的 app 的 UUID.
2. 根据 UUID 查找 dsym 文件位置.
mdfind "com_apple_xcode_dsym_uuids == DD7A6D50-0486-39A1-9E0C-73439450360A"
当然, 前提是你的本机的确有这个文件存在.
复制该文件到 crash_file 目录
可以检验该文件的 UUID, 同理使用 dwarfdump
dwarfdump 也可以根据 dsym 文件, 找到对应的 crash 位置.
dwarfdump --arch armv7 dsds.app.dSYM --lookup 地址(如0x12345) | grep 'Line table'
不过使用比较麻烦. 这里不再赘述.
关于 dwarfdump 的其他用法, 请关注后续博客.
当然, 你也可以查看其帮助.