关于崩溃日志的处理

来源:互联网 发布:python for line in f 编辑:程序博客网 时间:2024/06/10 11:32

关于崩溃日志的处理

如何查看 各种崩溃

如果是已经上线的版本的话,你可以直接在xcode中查看崩溃日志或者定位崩溃代码位置 xcode->Window->Organizer->Crashes,如乳沟你想查看详细的崩溃日志,请右键点击崩溃信息,你可以直接点击进行定位,如果你需要查看崩溃日志可以右键show in finder 人后查看对应的xccrashpoint文件的显示包内容–DistributionInfos–all–Logs–这里便是对应的崩溃日志。

如果是测试版本的话,首先你需要在打包之前在targets的build-settings中设置Debug Information Format设置为DWARF with dSYM File,这样才能存下来dSYM文件否则你存下来的dSYM是空白的哦.设置玩这个后你要进行打包 ,打包后请记得导出.xcarchive文件然后右键显示包内容:找到dSYMS文件夹打开里边有.dSYM文件存在桌面新建的文件夹中,并且把Products–Applications汇总的xxx.app也赋值到新的文件夹中就可以了.准备工作完成了。

当你测试的时候手机崩溃:
请导出你的崩溃日志window-devicesAndSimulators中 对应设备的viewDeviceLogs–对应的文件然后右键下载下来放在桌面的文件夹中存储.
这儿时候文件夹中一共有三个文件 导出来的崩溃日志
.crash/.dSYM/.app.
这时候你需要做如下步骤
1.请查看三个文件的的uuid是否是同一个.(查看方法自行百度)
2.可以用工具sDYMTool,或者手动去定位(百度一堆方法)
关于各种不同类型的崩溃日志的处理卡如下:

第一种


Exception Type:  00000020Exception Codes: 0x000000008badf00dException Note:  SIMULATED (this is NOT a crash)Highlighted by Thread:  12

这种错误代码提示的主要信息在note 上 他告诉了你这不是一个崩溃,一般是你缺少某些配置或者主程序未响应会出现这种问题。

第二种

Exception Type:  EXC_CRASH (SIGABRT)Exception Codes: 0x0000000000000000, 0x0000000000000000Exception Note:  EXC_CORPSE_NOTIFYTermination Description: DYLD, Library not loaded: @rpath/driving_core.framework/driving_core | Referenced from: /var/containers/Bundle/Application/645A38D0-71AC-46BD-AABD-ABDCC16AE773/AnYiXing.app/AnYiXing | Reason: image not foundTriggered by Thread:  0

这种是引用得一些framework只能存在于高版本得sdk中,但是,如果编译到低版本的ios就会发生这样的问题。 解决办法是target下的Build Phases标签里,找到Link Binary With Libraries,找到driving_core的framework把他的由Required 修改成Optiona。

第三种

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000ff6b4bec8Termination Signal: Segmentation fault: 11Termination Reason: Namespace SIGNAL, Code 0xbTerminating Process: exc handler [0]Triggered by Thread:  12Filtered syslog:None found

出现这个问题是楼主项目中的webview位置,报EXC_BAD_ACESS错误,应该是对象被释放后导致了野指针调用问题。测试后发现是因为webview处理未完成的时候就直接侧滑退出返回上一个界面导致webview在动画中,持有者(VC)已经被释放导致的。
处理办法就是在vc被释放前先添加了webview的delegate置空处理。这种问题在tablview或者scrollview也会出现所以遇见类似的你可以看看是否是这个地方出现了问题。

第四种

TCC: __CRASHING_DUE_TO_PRIVACY_VIOLATION__Exception Type:  EXC_CRASH (SIGABRT)Exception Codes: 0x0000000000000000, 0x0000000000000000Exception Note:  EXC_CORPSE_NOTIFYTermination Reason: TCC, This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryAddUsageDescription key with a string value explaining to the user how the app uses this data.

漏出出现这个问题是因为在ios11上读写权限被分开了 需要添加单独写入的权限 在消息的说明中已经很明确的指出了需要我们去添加图片的NSPhotoLibraryAddUsageDescription。也就你觉得你的项目中没有用到写入,但是我也建议你加上,因为如果你项目有webview 网页本身的长点击会调用webview的js方法,从而调用js保存图片 这个时候依然需要写入权限的哦

第五种 低内存闪退

crash日志中的process和type都为unknown这种

第六种 watchdog超时

异常代码:“0x8badf00d”,即“ate bad food”。

如果说特定的UI事件比较抽象,那么用代码来直接描述的话,对应的就是(创建一个工程时Xcode自动生成的)UIApplicationDelegate的几个方法,遇见这种情况需要去检查AppDelegate中对应的的applicaiton的方法

关于用户强制退出是否产生.crash

1.如果你是双击home键这种,不会产生crash ,因为双击后你属于程序挂起的后台状态,而这种状态ios是有可能关闭后台进程的所以不产生崩溃日志
2.如果你是按住电源键+home的话.会产生日志,但不针对特定的应用程序

3.比较极端的,先按住电源键,屏幕出现滑动关机,在按住home这时候当前的应用程序会被终止产生crash日志

3的情况下会产生如下的信息applicaiton specific infomation:User initiated force quit of applicaiton

常见的错误标识

0x8badf00d错误码:Watchdog超时,意为“ate bad food”。

0xdeadfa11错误码:用户强制退出,意为“dead fall”。

0xbaaaaaad错误码:用户按住Home键和音量键,获取当前内存状态,不代表崩溃。
0xbad22222错误码:VoIP应用(因为太频繁?)被iOS干掉。

0xc00010ff错误码:因为太烫了被干掉,意为“cool off”。

0xdead10cc错误码:因为在后台时仍然占据系统资源(比如通讯录)被干掉,意为“dead lock”。

SEGV(Segmentation Violation,段违例):
尝试往只读区域写数据;
解引用空指针;
使用未初始化的指针;
栈溢出;

此外,比较常见的崩溃基本都源于代码bug,比如数组越界、插空、多线程安全性、访问野指针、发送未实现的selector等。遇到这些bug时,都有比较清楚的错误原因说明,比如“index 0 beyond bounds for empty array”等。

原创粉丝点击