一、源代码
如果自己是开发者,有源代码在手,那就最方便了,大家都知道
二、App崩溃
如果是安装到用户手机上的应用崩溃了,那该怎么办呢?
把应用崩溃的手机连到Xcode, Devices -> View Device Logs
就能看到该设备对应的所有crash
点击"Re-Symbolicate Log",把符号做一些解析
导出crash log
1.1 debug版本
按理说,符号都在App中,"Re-Symbolicate Log"应该能把所有符号解析出来,但事实却不是这样
系统库的符号是解析了,但是App的符号没有解析
1.1.1 atos工具
将对应版本的myapp.app文件和crash文件放在同一个文件夹下 。
注意,一定要是该应用正确版本的app, 因为每次打包, 符号表的映射关系都有可能不同,如果不对应的话是没法符号化的.
然后运行: atos -arch arm64 -o iOSDemoViewController.app/iOSDemoViewController -l 0x100648000 0x10064df84
解析结果不是很完整,没有具体的行号信息
https://blog.csdn.net/bravegogo/article/details/50634619
1.2 release版本
如果直接从App的生成目录安装App(包含dSYM文件)
打开崩溃日志等一会,或者"Re-Symbolicate Log"后会得到准确的堆栈信息
注意: 如果是在同一台mac上打包,导入crash log时候Xcode会自动将backtrace符号化,可以看到方法名, 文件名和行号。跟安装位置没关系,就算把App移到其他位置安装也是可以看到解析后的堆栈
如果发版的包不是在你的mac上打包的,xcode找不到对应的符号表,这个时候就需要手动解析了
1.2.1 atos工具
atos -o dysm文件路径 -l 模块load地址 调用方法的地址
上面的0x182274000就是模块load地,0x0000000182399900就是调用方法的地址
1.2.2 symbolicatecrash命令