iOS crash 追终 ,iOS 如何定位crash 位置

Posted just coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS crash 追终 ,iOS 如何定位crash 位置相关的知识,希望对你有一定的参考价值。

https://developer.apple.com/library/ios/technotes/tn2151/_index.html

错误分析是基于设备中的crash log 与 编译文件时生成的dsYM文件相结合得出的结果,crash log 中包含应用的 crash trace stack,dsym中包含应用的符号表信息,符号表信息用于匹配程序中的文件,函数,代码,行号。

一、可用crash trace 追踪的crash

二、low memery 是追踪不到的因为没有对应以下的这类型的符号

1)EXC_BAD_ACCESS

SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。

SIGABRT:  收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。
SEGV:(Segmentation  Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;

SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题)

SIGILL:尝试执行非法的指令,可能不被识别或者没有权限
2)EXC_BAD_INSTRUCTION

3)EXC_ARITHMETIC

不用第三方工具,如何分析?

首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的xxx.app和xxx.dSYM文件。
其次,验证xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。
验证方法:
1)xxx.app。dwarfdump --uuid mobileguard.app/mobileguard
2)xxx.dSYM。dwarfdump --uuid mobileguard.app.dSYM/Contents/Resources/DWARF/mobileguard
3)xxx.crash。
确保三者uuid一致以后,用symbolicatecrash工具生成易读的日志信息。

先准备环境:
1)链接symbollicatecrash到/usr/bin/中,就可以直接使用sybollicatecrash命令。ln -s /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /usr/bin/symbolicatecrash
2)设置xcode DEVELOPER_DIR。export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer”
然后执行命令:symbolicatecrash m.crash mobileguard.app.dSYM > n.crash

当然是有 分析工具可以用的:

Crashlystics (twitter,使用自动集成工具,通过上传dsym文件形式,强烈推荐使用,简单,好用,定位问题快,准)

Bugly (腾讯,用相应的jar 将dsym分析后上传至腾讯服务器)

MoClick (友盟,需下载crash log 并用相应的工具解析)

Hockeyapp (微软,需上传dsym文件,收费,有自动集成工具)

 











以上是关于iOS crash 追终 ,iOS 如何定位crash 位置的主要内容,如果未能解决你的问题,请参考以下文章

crashlog解析-iOS

iOS中的crash防护unrecognized selector sent to instance

iOS通过dSYM文件分析crash

iOS:crash崩溃日志分析

iOS知识点汇总

[转] iOS开发同学的arm64汇编入门