领导安排收集App Crash信息,我通过苹果提供的NSSetUncaughtExceptionHandler和对信号的监听来实现。它可以获取大部分奔溃信息,但是对于比较复杂的奔溃就不能精确定位。
搜集其它方法
一。集成Bugly,firebase, 友盟,听云等众所周知的性能/崩溃抓取组件
1.Bugly
2.firebase
3.友盟
4.听云
二。集成KSCrash,PLCrashReport等开源组件来收集崩溃日志
1.KSCrash
最后我集成的是TLCrashReport。下面记录获得奔溃信息后dysm解析过程。
1.dysm解析过的日志大概长这样,能看到崩溃产生的行数.函数等:

收集到的堆栈信息是这样的,不容易看懂

2.原始堆栈信息的解析
原始堆栈信息也可以直接用xcode提供的工具解析出来.具体步骤为:
找到xcode的symbolicatecrash工具. 在命令行中输入shell查找命令:
find /Applications/Xcode.app -name symbolicatecrash -type f
会输出symbolicatecrash工具的地址:例如:
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks /DVTFoundation.framework/symbolicatecrash把它copy出来放到单独的文件夹里,把通过TLCrashReport得到的1.crash文件也放过来,把项目的dSYM文件也放过来:

在命令行输入:
./symbolicatecrash /Users/mac/Desktop/crash/1.crash /Users/mac/Desktop/crash/1.dSYM > Control_symbol.crash(文件路径替换为自己的)
此时会有警告:
symbolicatecrash is deprecated; it will be removed in future releases of Xcode ⚠️
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 75.
输入:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
再次执行上个命令,会生成解析成功的文件。可以查看到奔溃详情
三.错误处理
1.解决App打包后dSYM文件找不到的问题
(1). 处理dSYM文件缺失通常需要检查Xcode中的两处配置,首先检查Project -> Build Settings下的Generate Debug Symbols配置是否设置为YES,如果为NO,则不会生成生成调试符号文件,也就不会生成xxx.app.dSYM文件
(2).在确保Generate Debug Symbols配置为YES的情况下,还需要检查Project -> Build Settings下的Debug Information Format的值是否被设置为DWARF。如果是则需要修改为DWARF with dSYM File后再重新打包,才会生成新的dSYM文件。但如果Generate Debug Symbols配置为NO的情况下,即使Debug Information Format的值设置为DWARF with dSYM File也不会生成xxx.app.dSYM文件

2.No symbolic information found
解决办法:
每一个 xx.app 和 xx.app.dSYM 文件都有对应的 UUID,crash 文件也有自己的 UUID,只要这三个文件的 UUID 一致,才可以解析出正确的错误函数信息,否则就会出现No symbolic information found错误信息。
(1)查看 xx.app 文件的 UUID,terminal 中输入命令 :
dwarfdump --uuid xx.app/xx
(2)查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入命令:
dwarfdump --uuid xx.app.dSYM
(3)crash 文件内 Binary Images: 下面一行中 <> 内的 字符串 就是该 crash 文件的 UUID
浙公网安备 33010602011771号