第一步:获取崩溃日志:
xcode6: 选择window-> Devices,选择对应的真机及对应的项目。点击View Device Logs ,可以看到所有的按时间排序的日志。
1.当crash log 里面格式如下时,怎么处理:
Last Exception Backtrace:
0 CoreFoundation 0x2f29be7e 0x2f1c7000 + 872062
1 libobjc.A.dylib 0x395f86c2 0x395f0000 + 34498
2 CoreFoundation 0x2f29bdc0 0x2f1c7000 + 871872
4 libsystem_platform.dylib 0x39c0a716 0x39c07000 + 14102
5 libsystem_malloc.dylib 0x39bcde66 0x39bcd000 + 3686
6 libobjc.A.dylib 0x395f99d6 0x395f0000 + 39382
7 libobjc.A.dylib 0x395fb792 0x395f0000 + 46994
8 libobjc.A.dylib 0x395f4026 0x395f0000 + 16422
9 libobjc.A.dylib 0x395f3df4 0x395f0000 + 15860
10 CoreFoundation 0x2f1cbe88 0x2f1c7000 + 20104
左边是框架、库,右边是十六进制的内存地址。像这样数字符合,无法直观的看出有用的信息。
下面就是怎么将右边这些纯内存地址数字的信息转成符号化的方法名或者其他的有用信息的过程。
2. 首先实现转化的前提。需找到生成的对应的.dSYM 文件。
2.1.1 联调时,这个文件可以这样找到:xcode 左侧的 Products 下面的 xxxx.app 文件 -> show in finder -> xxxx.app.dSYM
2.1.2 打包(archieve)过的项目, window -> Organizer - > 找到你需要的对应的项目 -show in finder - > 显示包内容,里面有两个文件夹,一个文件。分别为:dSYMS - > xxxx.app.dSYM, Products->xxxx.app, info.plist 。
2.2 下面需要将 2.1步骤 show in finder 里面的两个文件和 xxxx.app.dSYM 最里层的文件放置同一文件夹(xxxx.app.dSYM - > 显示包内容->contents -> Resources ->DWARF 里面的文件 )。 (到这一步,有可能会自动符号化。还不行的话,继续往下走)
2.3 在三个文件所放置的文件夹下,点击 Go2Shell 的快捷方式(快速跳至当前文件夹的终端路径)()
2.4 在终端下输入如下命令:dwarfdump -u xxxx.app/xxxx (xxxx:项目名, xxxx文件为.dSYM最里层的文件)
2.5. 将某一个内存地址符号化,输入如下命令(例如:0x2f29bdc0):
xcrun atos -arch armv7 -o 0x2f29bdc0
敲回车,就会将这条内存地址符号化了,也是有点笨的方法。一条条的转化。(armv7:真机, i386 :模拟器,)
上面所述:只是在帮助查看,处理崩溃日志中用到的一点小方法。如有错误,请指正。