博客> 静态库文件的crash信息提取
静态库文件的crash信息提取
2018-11-16 17:08 评论:0 阅读:511 lvhahaha
Bug crash 静态库

功能背景: 项目中存在某些功能,需要用静态库集成的方式接入。

问题描述: 在线上运行过程中发现某些Crash出自静态库,但是Crash日志里面无法定位到静态库出现Crash的具体代码行数。

如下,testNull的Thread 0发生Crash,但是没有函数相关信息。

Exception Type: EXC_BAD_ACCESS (SIGSEGV) Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 testNull 0x000000010494aacc 0x104944000 + 27340 1 testNull 0x000000010494aac8 0x104944000 + 27336 2 testNull 0x000000010494a6b0 0x104944000 + 26288 3 UIKit 0x000000018cec4efc -[UIViewController loadViewIfRequired] + 1040 4 UIKit 0x000000018cec4ad4 -[UIViewController view] + 28 5 UIKit 0x000000018cecb6a0 -[UIWindow addRootViewControllerViewIfPossible] + 136 6 UIKit 0x000000018cec890c -[UIWindow _setHidden:forced:] + 272 7 UIKit 0x000000018cf379ec -[UIWindow makeKeyAndVisible] + 48

相关实现: 静态库有单独的工程,会打包出模拟器和真机两个framework,然后合并成一个framework,再放入项目的工程。

问题定位: Crash日志里面的信息无法符号化,原因就是还原Crash信息的符号表里没有静态库的信息。 我们知道,静态库是只有编译,没有链接的过程。 在实际打到二进制包的时候,才会进行链接操作。(参考这里) 符号表里没有静态库的信息,是静态库的framework里没有代码行数的相关信息! 通过查询官方文档知道,Generate Debug Symbols的属性描述如下

Enables or disables generation of debug symbols. When debug symbols are enabled, the level of detail can be controlled by the Debug Information Format (DEBUG_INFORMATION_FORMAT) setting.

静态库的工程如果设置该属性为NO,那么打包出来的framework是不包括Debug用的信息。

问题修复: 修改Generate Debug Symbols设置。  屏幕快照 2018-06-11 下午4.52.16.png

附: Xcode相关设置的文档,直接点击这里的链接。如果失效,可以按照下面的步骤查找:  屏幕快照 2018-06-11 下午4.52.22.png

收藏
1
sina weixin mail 回到顶部