dsYM文件分析方法

dSYM文件是什么?

  • debugger Symbols 的简称
  • .dSYM文件是一个符号表文件, 这里面包含了一个16进制的保存函数地址映射信息的中转文件, 所有Debug的symbols都在这个文件中(包括文件名、函数名、行号等).
  • 一般Xcode项目每次编译后, 都会产生一个新的.dSYM文件和.app文件, 这两者有一个共同的UUID.
  • 注:项目编译完dSYM文件和app文件在同一个目录,Xcode Debug 编译默认不会生成.dSYM文件, Release 编译才会生成

METHOD.1 Xcode分析

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了。

METHOD.2 使用命令行工具symbolicatecrash

1、将“.app“, “.dSYM”和 ".crash"文件放到同一个目录./Crash 下。
2、在Xcode中找到 symbolicatecrash 工具

使用命令find /Applications/Xcode.app -name symbolicatecrash -type f 可以轻松找到。找到后你会发现有多个其中/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/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中了。

METHOD.3 atos

  • atos 是一个可以把地址转换为函数名(包括行号)的工具, 它和dwarfdump 为mac os自带工具.

我们使用atos命令来完成符号化,具体命令如下: $ atos -arch -o /Contents/Resources/DWARF/ -l

其中:

  • Binary Architecture: arm64、armv6、armv7 armv7s 根据自己的情况来写。
  • Path to dSYM file: dSYM文件的路径。
  • binary image name: 你工程的名字。
  • load address: 是运行时起始地址(基地址),如果我们的崩溃日志中没有这个信息(比如上面的Crash信息中就没有包含),就需要我们手动去计算这个load * address:laod address = address to symbolicate - offset,比如:0x0000000102838119转化为十进制为4337139993,再减去偏移量265,为4337139728,在转化为十六进制0x0000000102838010
  • address to symbolicate:运行时堆栈地址,当前方法的内存地址。

具体示例:atos -arch arm64 -o CrashDemo.app.dSYM/Contents/Resources/DWARF/CrashDemo -l 0x0000000102838010 0x0000000102838119

补充:

查看dsYM文件UUID:
方法一: 通过命令行查看dSYM文件的UUID
xcrun dwarfdump --uuid
dwarfdump --uuid TestAvoidCrash.app.dSYM/
dwarfdump --uuid TestAvoidCrash.app/TestAvoidCrash

方法二:通过符号表文件查看UUID
符号表文件的UUID与dSYM文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看dSYM文件的UUID:
生成符号表文件(.zip) ---> 解压符号表文件(.symbol) ---> 使用文本编辑器打开符号表文件

你可能感兴趣的:(dsYM文件分析方法)