领导安排收集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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库