【问题标题】:How to decode a Crash log using dSYM file in iOS?如何在 iOS 中使用 dSYM 文件解码崩溃日志?
【发布时间】:2012-08-06 15:47:40
【问题描述】:

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

【问题讨论】:

    标签: ios crash crash-log


    【解决方案1】:

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

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

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

    打开崩溃日志(X Code - Organizer - crash),找到出现“Binary images”标题的那一行。这是第一行中的另一个 UUID,它应该与之前在终端中收到的再次匹配。

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

    Application_name 0x123456
    Application_name 0x987654
    

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

    调试愉快!

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

    【讨论】:

    【解决方案2】:

    灵感

    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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-16
        • 2017-10-07
        • 2019-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 1970-01-01
        • 2021-06-13
        相关资源
        最近更新 更多