iOS平台中,dSYM文件是指具有调试信息的目标文件,文件名通常为:xxx.app.dSYM。如下图所示:
为了方便找回Crash对应的dSYM文件和还原堆栈,建议每次构建或者发布APP版本的时候, 备份好dSYM文件
Bugly还原Crash堆栈时,需要根据UUID来匹配符号表文件,因此只有上传的符号表文件的UUID与Crash对应APP的UUID一致时,才能准确地对堆栈进行还原。
通过命令查看UUID
通过符号表文件查看UUID
符号表文件的UUID与dSYM文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看dSYM文件的UUID:
生成符号表文件(.zip) --->解压符号表文件(.symbol) --->使用文本编辑器打开符号表文件
其中符号表文件的“UUID”信息即Debug SO文件的UUID,亦是符号表文件的UUID,如果文件较大,建议使用“Sublime Text”等文本编辑器来打开符号表文件。
当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观的看到用崩溃的错误,这个时候我们就需要分析 crash report 文件了,iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么我们很有必要保存每个发布版本的 Archives 文件了。
符号集是我们对ipa文件进行打包之后,和.app文件同级的后缀名为.dSYM的文件,这个文件必须使用Xcode进行打包才有。
每一个.dSYM文件都有一个UUID,和.app文件中的UUID对应,代表着是一个应用。而.dSYM文件中每一条崩溃信息也有一个单独的UUID,用来和程序的UUID进行校对。
我们如果不使用.dSYM文件获取到的崩溃信息都是不准确的。
符号集中存储着文件名、方法名、行号的信息,是和可执行文件的16进制函数地址对应的,通过分析崩溃的.Crash文件可以准确知道具体的崩溃信息。
我们每次Archive一个包之后,都会随之生成一个dSYM文件。每次发布一个版本,我们都需要备份这个文件,以方便以后的调试。进行崩溃信息符号化的时候,必须使用当前应用打包的电脑所生成的dSYM文件,其他电脑生成的文件可能会导致分析不准确的问题。
当程序崩溃的时候,我们可以获得到崩溃的错误堆栈,但是这个错误堆栈都是0x开头的16进制地址,需要我们使用Xcode自带的symbolicatecrash工具来将.Crash和.dSYM文件进行符号化,就可以得到详细崩溃的信息。
https://www.jianshu.com/p/0b6f5148dab8
http://foggry.com/blog/2015/07/27/ru-he-shou-dong-jie-xi-crashlog/
1、要使用Xcode符号化 crash log,你需要下面所列的3个文件:①crash报告(.crash文件)
②符号文件 (.dsymb文件)
③应用程序文件 (.app文件)
2、把这3个文件放到同一个目录下,打开Xcode的Window菜单下的organizer,然后点击Devices tab,然后选中左边的Device Logs。
然后把.crash文件拖到Device Logs或者选择下面的import导入.crash文件。
这样你就可以看到crash的详细log了。
1、将“.app“, “.dSYM”和 ".crash"文件放到同一个目录 ./Crash 下。
2、在Xcode中找到 symbolicatecrash 工具
找到后将 symbolicatecrash 拷贝到 ./Crash 目录下
3、切换到 ./Crash 目录下。 打开终端(Terminal)然后输入如下的命令:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
然后输入命令:
./symbolicatecrash appName.crash appName.app >appName.log
现在,符号化的crash log就保存在appName.log中了。
我们使用atos命令来完成符号化,具体命令如下: $ atos -arch <Binary Architecture>-o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name>-l <load address><address to symbolicate> 其中:
具体示例: atos -arch arm64 -o CrashDemo.app.dSYM/Contents/Resources/DWARF/CrashDemo -l 0x0000000102838010 0x0000000102838119
查看dsYM文件UUID:
方法一: 通过命令行查看dSYM文件的UUID
① xcrun dwarfdump --uuid <dSYM文件>
② dwarfdump --uuid TestAvoidCrash.app.dSYM/
③ dwarfdump --uuid TestAvoidCrash.app/TestAvoidCrash
方法二:通过符号表文件查看UUID
符号表文件的UUID与dSYM文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看dSYM文件的UUID:
生成符号表文件(.zip) --->解压符号表文件(.symbol) --->使用文本编辑器打开符号表文件
一般情况下, 项目编译完 dSYM 文件和 app 文件在同一个目录.
如果未发现 .dSYM 文件呢?
找到.dSYM文件后, 如果需要查看UUID的话, 在文件所在目录下, 输入以下指令
atos 是一个可以把地址转换为函数名(包括行号)的工具, 它和 dwarfdump 为mac os自带工具.
另外, 我们可以通过Xcode菜单栏中Window ->Device and Simulator ->View logs 查看手机运行 crash log
右侧的 log信息 , 第一次加载的时候是 未被符号话 的,
由于Xcode内置了 symbolicatecrash 工具, 所以过了一会这个 log 会显示出函数调用信息.
模拟器:
真机(iOS设备):
若文中有任何错误, 请不吝赐教.
参考
Bugly符号表使用
手动解析CrashLog之----方法篇
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)