crash文件符号化攻略

根据 .crash文件符号化堆栈信息,这个操作你可能并不陌生,详细可以看.crash文件符号化

下面总结一下主要的命令:

查看dSYM文件的UUID如下

 dwarfdump --uuid Your.app.dSYM

或者:

 dwarfdump --uuid Your.app.dSYM/Contents/Resources/DWARF/Your

crash文件的UUID

grep "appName armv" *crash

或者

 grep --after-context=2 "Binary Images:" *crash

我们可以手动从mach-O文件中提取.dsym文件

 $ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil /Users/wangzz/Library/Developer/Xcode/DerivedData/YourApp-cqvijavqbptjyhbwewgpdmzbmwzk/Build/Products/Debug-iphonesimulator/YourApp.app/YourApp -o YourApp.dSYM

==========

认识崩溃堆栈

以下面的崩溃堆栈为例:

WX20190418-174125.png

从上述堆栈中第3行可以看到,应用崩溃发生在运行时地址0x0000000104d93244,该进程的运行时起始地址是0x0000000104918000,崩溃处距离进程起始地址的偏移量为十进制的4698692(对应十六进制为0x47B244)。三者对应关系:
0x0000000104d93244 = 0x0000000104918000 + 0x47B244

对应的公式为:

运行时堆栈地址 = 运行时起始地址 + 偏移量

崩溃堆栈中的起始地址和崩溃地址均为运行时地址,根据虚拟内存偏移量不变原理,只要提供了符号表TEXT段的起始地址,再加上偏移量(这里为0x47B244)就能得到符号表中的堆栈地址,即:

符号表堆栈地址 = 符号表起始地址 + 偏移量

atos简单使用

开发者能获取到错误堆栈信息,而使用atos工具就是把地址对应的具体符号信息找到。它是一个可以把地址转换为函数名(包括行号)的工具

atos无需计算崩溃地址对应的符号表地址的方式,命令格式如下:

atos -o Your.app.dSYM/Contents/Resources/DWARF/Your -arch armv7 -l 0x0000000104918000 0x0000000104d93244

其中 -l 选项指定了二进制文件在运行时的起始地址0x0000000104918000,后面跟的是崩溃发生的运行时地址0x0000000104d93244,符号化结果如下:

或者

atos -o Your.app.dSYM/Contents/Resources/DWARF/Your -arch armv7 -l loadaddr  

回车
然后输入崩溃地址

根据项目的dYSM符号化堆栈信息就是这样,但是对于系统库的符号化,还需要系统库的符号文件参考:iOS系统库符号化
参考:

手动解析CrashLog之----方法篇

你可能感兴趣的:(crash文件符号化攻略)