随笔 - 68,  文章 - 0,  评论 - 0,  阅读 - 40159

领导安排收集App Crash信息,我通过苹果提供的NSSetUncaughtExceptionHandler和对信号的监听来实现。它可以获取大部分奔溃信息,但是对于比较复杂的奔溃就不能精确定位。

搜集其它方法

一。集成Bugly,firebase, 友盟,听云等众所周知的性能/崩溃抓取组件

1.Bugly

2.firebase

3.友盟

4.听云

 

二。集成KSCrash,PLCrashReport等开源组件来收集崩溃日志

1.KSCrash

2.PLCrashReport

 

最后我集成的是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



 

 

 

 

 

 

posted on   代码少年_夕阳  阅读(561)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示