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 <Binary Architecture> -o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name> -l <load address> <address to symbolicate> 其中:

  • 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 <dSYM文件>
②dwarfdump --uuid TestAvoidCrash.app.dSYM/
③dwarfdump --uuid TestAvoidCrash.app/TestAvoidCrash

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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自wufawei的博客当你的应用提交到App Store或者各个渠道之后,请问你多久会拿到crash文件?你如何...
    Louis_hey阅读 1,587评论 0赞 6
  • 在开发中很多项目使用了类似友盟统计的第三方统计工具,这样可以在友盟给出的错误信息统计中比较方便的找出客户端异常的信...
    Richard_Wei阅读 1,372评论 0赞 1
  • 在开发中很多项目使用了类似友盟统计的第三方统计工具,这样可以在友盟给出的错误信息统计中比较方便的找出客户端异常的信...
    NB_killer阅读 315评论 0赞 0
  • 本文就捕获iOS Crash、Crash日志组成、Crash日志符号化、异常信息解读、常见的Crash五部分介绍。...
    xukuangbo_阅读 1,783评论 0赞 0
  • 方法1 使用XCode这种方法可能是最容易的方法了。 需要使用Xcode符号化 crash log,你需要下面所列...
    minking1982阅读 1,302评论 0赞 0

友情链接更多精彩内容