crash log 解析方法

1.  使用 dwarfdump 命令 ,需要首先进入 dSYM所在目录

tans-Mac-mini:4.3-4.6Crash tangaowen$ dwarfdump --lookup 0x00097a87   --arch armv7 XXX.app.dSYM



2. 使用 atos命令 ,首先需要进入dSYM所在目录

  XXX                  0x00075754 0x53000 + 141140


tans-Mac-mini:4.3-4.6Crash tangaowen$ atos -arch armv7 -o XXX  -l 0x53000  0x00075754


其中 XXX是 包名, 从dSYM 包里面copy出来的,不是 app文件



如果在编译的时候使用了 PIE  开关,就会每次加载的地址不一样。也就是 Link 下面的Don’t Create Position Independent Executables

ASLR 技术Address space layout randomization


不管是方法1,还是方法2, 都需要使用一个公式:

symbol address = slide + stack address - load address


这个公式中 symbol address 是最终用来符号化的地址, slide 就是上面获得的 dSYM 默认的加载地址,stack address就是崩溃堆栈里面的地址, load address是  模块加载到内存中的起始地址,一般是Binary Image字段 的第一行 的 最前面的那个地址。

(1) 获取 slide  

方法1  andys-Mac-mini:4.3-4.6Crash tangaowen$ otool -arch armv7 -l ZPController

方法2  andys-Mac-mini:DWARF tangaowen$ otool -arch armv7  -l "ZPController" | grep -B 3 -A 8 -m 2 "__TEXT"


获取 模块加载地址如下:

  segname __TEXT

   vmaddr 0x00004000

   vmsize 0x003fc000

地址是 0x4000


 (2) 获取 stack address  

  就是 堆栈trace 行首的地址

  比如: 8 - 8   ZPController                        0x00154a87 main + 98  

  就是  0x00154a87


 (3) Binary Image字段的 第一行 行首的 地址

   比如:

   Binary Images:
0x53000 - 0x44efff ZPController armv7  <3c3c3bd7371333cea172602c1c718990> /var/mobile/Containers/Bundle/Application/23BF52E5-9C5E-43DC-B05E-96A02FEA9CCD/ZPController.app/ZPController
0x1fee7000 - 0x1ff0afff dyld armv7s  <7216b86d38393128b0da3b7109d30710> /usr/lib/dyld
0x20993000 - 0x20afffff AVFoundation armv7s  <23a20af23f733b39b5c87059c080f9f7> /System/Library/Frameworks/AVFoundation.framework/AVFoundation


  那就是 0x53000 



 





你可能感兴趣的:(crash log 解析方法)