转 iPhone Crash Log转换符号表
http://wjl4926.blog.163.com/blog/static/97330204201272162313115/但随之而来的问题是,我们收到的程序崩溃调试信息多半是汇编语言一样的堆栈代码,同时这些信息并不是在我们debug的时候产生,所以看到这一串crash log的天书,常常无可奈何。Xcode很好的解决了这一问题,它所提供的Orgainzer分析器加上symbolicatecrash,可以分析二进制文件以及源代码和crashlog之间的连接,直接找出源程序中出错的代码行。方法网上到处是,本文不讨论。
但是如果使用symbolicatecrash无法定位到出错的代码行的话,怎么整呢?有一个办法,如下:
首先查看crash log中的崩溃线程,假如是这样的:
Thread 0 Crashed:
0 libobjc.A.dylib 0x00003ec0 objc_msgSend + 24
1 MyApp 0x000036d2 0×1000 + 9938
我们得到了用户发生崩溃情况的内存地址:0x000036d2
然后回到我们应用程序的build目录,目录下一定要包含MyApp.app 和MyApp.app.dSYM两个文件。
在控制台使用dwarfdump命令,解析出内存地址,如:
dwarfdump –-lookup 0x000036d2 –arch armv6 MyApp.app.dSYM
命令行转换日志
方法1:用工具直接获取 iPhone 设备上 /var/mobile/Library/Logs/CrashReporter 中的 Crash 报告文件。(Mac 下用 PhoneView/iTools/iExplorer,Windows下用、iFunBox、iTools、91助手等)。
方法2:如果 iTunes 同步,则同步后Crash日志会同步到电脑上,把以下目录中的Crash提取打包即可:
Mac OS X:~/Library/Logs/CrashReporter/MobileDevice
Windows XP:C:\Documents and Settings\Application Data\Apple computer\Logs\CrashReporter
Windows 7/Vista: C:\Users\AppData\Roaming\Apple computer\Logs\CrashReporter/MobileDevice/