如何在iOS中使用dSYM文件解码崩溃日志?

时间:2012-08-09 12:05:17

标签: ios crash crash-log

我的iOS应用程序崩溃了。我想用dSYM文件读取崩溃日志。怎么可能?

3 个答案:

答案 0 :(得分:35)

首先,您需要三个文件:dSYM文件,应用程序文件和崩溃日志。

打开X代码,在项目导航器中显示Products文件夹,并在“查找器中显示”应用程序文件。在这里你也可以找到dSYM文件。将它们复制到一个文件夹。

现在打开终端,然后导航到之前复制这两个文件的文件夹。运行:dwarfdump --uuid Application_name.app/Application_name 您应该收到应用程序的UUID。 运行以下命令:dwarfdump --uuid Application_name.app.dSYM - 您将再次收到UUID,该UUID应与先前收到的UUID匹配。

打开崩溃日志(X代码 - 管理器 - 崩溃),找到出现“二进制图像”标题的行。这是第一行中的另一个UUID,它应该与先前在终端中收到的UUID匹配。

现在,您确信崩溃已记录在您正在检查的构建中,因此请再次打开崩溃日志文件,找到Thread 0部分,并且应该有两行包含您的应用程序名称和两个地址。如:

Application_name 0x123456
Application_name 0x987654

在终端中你应该立即运行:atos -arch armv7 -o address1 address2(地址1和地址2应该用前两个地址替换,而armv7用你的系统替换 - 它显示在你获得UUID的行上)

快乐的调试!

编辑:我想提及this帖子作为我的基础。

答案 1 :(得分:1)

实际上,您无法解码dSYM文件,但会从中获取错误详细信息  1.从日志文件中找到崩溃线程和地址:以下是0x0nnn  2.从日志文件中找到本机代码类型:以下是arm64
 3.找到dSYM文件(符号文件),从.xcarchive中提取:以下是xx.app.dSYM

dwarfdump --lookup 0x0nnn --arch=[arm64 armv6 armv7] xx.app.dSYM

答案 2 :(得分:0)

灵感

https://developer.apple.com/library/archive/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATEWITHXCODE

获取dsym文件的步骤

  • 为存档构建iOS应用
  • 提取MyApp.xcarchive
  • 在该文件中,您将找到dSYM文件。

获取设备崩溃日志

将.crash文件拉出设备。我通常为此使用xCode。

逐行方法

atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc

0x1000e4000 = address of your app's image
0x00000001000effdc = is the stripped name of the symbol you want to turn into a readable name

专业方法

获取symbolicatecrash可执行文件的位置。

在xCode 9中,所需文件位于此处:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

将符号化的崩溃日志打印到终端

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

./symbolicatecrash -v crash_log_20_9_2018.crash myapp.app.dSYM

阅读

此处atos的详细说明: How to symbolicate crash log Xcode?

在没有dsym文件的情况下可以执行相同操作的方法: https://medium.com/@Mrugraj/crash-re-symbolication-5c28d3a3a883