iOS常见崩溃及dSYM文件

常见崩溃

1、多线程同步问题造成的Crash

对于数据源的访问一定要注意多线程同时访问的情况,要做好对它的保护。这里可以使用GCD的串行队列来同步线程操作。

2、Observer的移除

注册observer很简单,但是移除的时候很容易出问题了。要么是忘记移除observer了,要么是移除的时机不对。如果某个被观察对象已经被释放了,observer还在,那结果只能是crash了,所以切记至少在dealloc里面移除一下observer。

3、NSMutableArray, NSMutableDictionary成员的判空保护

在addObject或insertObject到NSMutableArray或者NSMutableDictionary时最好加一下判空保护,尤其网络相关的逻辑,如果网络返回为空(jason解析出来为空),而直接add到NSMutableArray里面或者insert到NSMutableDictionary, 那么就会Crash。

关于dSYM文件

dSYM文件:Xcode编译项目后,会得到一个同名的dSYM文件,dSYM是保存16进制函数地址映射信息的中转文件,调试的symbols都会包含在这个文件中,并且每次编译项目的时候都会生成新的dSYM文件,位于/sers/<用户名>/Library/Developer/Xcode/Archives目录下,对于每一个发布版本都很有必要保存对应的 Archives文件。

当软件release模式打包或上线后,不会像在Xcde中那样直观的看到用崩溃的错误,这个时候就需要分析crash report文件,iOS设备中会有日志文件保存每个应用出错的函数内存地址,通过Xcode的Organizer可以将设备中的Devicelog导出成crash文件,这个时候就可以通过出错的函数地址去查询dSYM文件中程序对应的函数名和文件名。大前提是需要有软件版本对应的dSYM文件,这也是为什么很有必要保存每个发布版本的Archives文件了。

每一个xx. app和xx.app. dsym文件都有对应的UUD,crash文件也有自己的UUD,只要这三个文件的UUD一致,就可以通过他们解析出正确的错误函数信息了。

  1. 查看××app文件的UUD,terminal中输入命令dwarfdump-- uuid xx. app/×x(x代表你的项目名)
  2. 查看 xx. app.dsYM文件的UUD,在 termina中输入命令:dwarfdump- uuid xx. app.dSYM
  3. crash文件内第一行Incident Identifier就是该crash文件的UUD

dSYM分析工具:可以分析友盟崩溃日志。

你可能感兴趣的:(iOS常见崩溃及dSYM文件)