【问题标题】:How to Manually Symbolicate iOS Crash to View Crash Logs如何手动符号化 iOS 崩溃以查看崩溃日志
【发布时间】:2011-04-19 11:23:18
【问题描述】:

尝试调试应用程序。问题是我找不到这个程序。

symbolicatecrash.sh

sudo cp /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/symbolicatecrash /usr/local/bin/

是单独下载吗?我正在使用 XCode 3.2.3

谢谢。

【问题讨论】:

    标签: iphone ios ipad symbolicatecrash crash-log


    【解决方案1】:

    产品菜单下有一个可用于 Xcode 的插件。此插件可通过Alcatraz package manager获取或直接下载from github

    此插件内部包含一个 shell 脚本,该脚本设置运行以下命令以进行手动崩溃符号化。

    1. 为 symbolicatecrash.pl perl 脚本设置别名

    别名 symbolicatecrash='/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash'

    1. 要查找 symbolicatecrash,它应该不同于上面的别名:

    找到 /Applications/Xcode.app -name symbolicatecrash -type f

    1. 设置 DEVELOPER_DIR 变量:

    导出 DEVELOPER_DIR='/Applications/Xcode.app/Contents/Developer'

    1. 使用 dSYM,崩溃可以表示为:

    symbolicatecrash /path/to/MyApp_2012-10-01_Device.crash /path/to/MyApp.app.dSYM。

    【讨论】:

      【解决方案2】:

      这是我使用的一个简单方法:

      1. 打开 Xcode 6
      2. 插入您的开发设备
      3. 在 Xcode 中,转到“窗口”>“设备”>“选择您的设备”
      4. 按“查看设备日志”
      5. 将报表拖到窗口中查看

      【讨论】:

      • 'View Deivce Logs'在Mac设备上不存在,那么如何通过symbolicate查看OSX Apps的崩溃日志?
      【解决方案3】:

      表示崩溃日志的一种方法是在终端上运行以下命令:

      xcrun atos -o MyApp.app/MyApp -arch armv7 -l 0xb7000 -f MyApp.crash

      将上述命令中的示例十六进制数 (0xb700) 替换为基本加载地址。基本加载地址是紧接其后的行中的第一个内存地址

      “二值图像:”

      获取 .app 文件:

      右键单击 xcarchive 文件并选择显示包内容 .app 文件位于 Products/Applications 目录中。

      【讨论】:

      • 帮助了我。谢谢。由于某些原因,Symbolicatecrash 仅象征了我的应用程序中的部分方法。 xcrun atos 向我展示了一切。这里可以看到对atos某些方面的解释:stackoverflow.com/questions/7675863/…
      【解决方案4】:

      正如 Apple 解释的那样,Xcode will try to symbolicate automatically. 它使用 symbolicatecrash 和 Spotlight 来做到这一点。但是,如果应用程序不是在本地构建或被删除,则必要的 .app 和 .dsym 文件不可用。

      因此,请保留 dsym 文件和已发布版本的应用程序。构建工具通常会将 .dsym 文件压缩为 .dsym.zip 并将 .app 打包为 .ipa。您可以将两者都解压缩并将 .app 和 .dsym 复制到同一个文件夹中。然后 Xcode 将能够使用 Spotlight 找到它们。

      【讨论】:

        【解决方案5】:

        编辑 :: XCode 4.3

        您将需要按照原始答案(如下)中概述的相同步骤进行操作,但有一些例外。

        首先,您需要修复 Xcode 路径。打开终端并运行:

        /usr/bin/xcode-select -print-path

        如果它显示“/Developer”或除“/Applications/Xcode.app/Contents/Developer/”以外的任何内容,那么它是错误的。要解决此问题,请运行以下命令:

        sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/

        您现在可以运行以下所有步骤,但symbolicatecrash 命令位于新位置(再次)除外。这是因为 Xcode 现在作为应用程序安装。 要找到symbolicatecrash,请从终端运行

        find /Applications/Xcode.app -name symbolicatecrash -type f

        这应该返回:

        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

        在运行symbolicatecrash 之前,您可能希望转到此目录,例如:

        CD /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/


        原答案 :: Xcode

        符号崩溃的路径

        从终端搜索:

        find /Developer -name symbolicatecrash -type f

        对我来说这是返回:

        /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

        如何手动符号化崩溃日志

        运行symbolicatecrash 命令,将崩溃日志作为第一个参数,将您的 dSYM 文件作为第二个参数。请注意,如果您要从当前目录运行 symbolicatecrash,则必须将 ./ 放在前面,如 ./symbolicatecrash,除非您的 PATH 环境变量包含命令所在的目录。

        我首先切换到包含symbolicatecrash 命令的目录(注意:Xcode 4.3 会有所不同,见顶部):

        CD /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/

        然后我执行了以下命令:

        ./symbolicatecrash /somePath/MyCrashLogFile.crash /somePath/MyAppName.app.dSYM

        如何找到 dSYM 文件:

        您必须拥有用于创建包含崩溃的构建的存档才能获取 dSYM 文件。

        步骤如下:

        1. 右键单击(或 ctrl 单击)来自管理器的存档并选择“在 Finder 中显示”。
        2. 从 finder 中的 xcarchive 文件中,右键单击(或 ctrl 单击)此文件并选择“显示包内容”。然后您将看到一个“dSYMs”文件夹。
        3. 在“dSYMs”文件夹中,您将找到用于符号化文件的“YourAppName.app.dSYM”文件。

        【讨论】:

        • 当我尝试运行 symbolicatecrash 时出现此错误:错误:“DEVELOPER_DIR”未在 ./symbolicatecrash 第 53 行定义。编辑:这有效:export DEVELOPER_DIR="/Applications/XCode.app/内容/开发者”
        • 值得注意的是,除非您从导致崩溃的同一个 .ipa 中提取了正确的 .app,否则符号化将不起作用,该 .ipa 与您的 .dSYM 和 .crash 位于同一文件夹中。我建议在您的桌面上创建一个新文件夹并将 .dSYM 和 .crash 文件放入其中。然后通过将名称更改为 ApplicationName.zip 从您的 ApplicationName.ipa 中提取 .app,双击它以解压缩内容。打开文件夹,在里面找到 ApplicationName.app。将 ApplicationName.app 复制到桌面上的文件夹中。现在在该文件夹中的 .crash 和 .dSYM 上运行符号化。
        • 在 Xcode 6 中,路径是 Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
        • 您必须运行$export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/ 来解决错误:“DEVELOPER_DIR”未定义
        【解决方案6】:

        我刚刚在 5 分钟前在这里写了一篇关于调试崩溃日志的帖子:http://just2us.com/2010/10/reading-iphone-crashlog/

        如果将日志拖放到 Xcode 足以满足您的目的,您可能不再需要 symbolicatecrash.sh。我用的是3.2.4,也找不到脚本。

        【讨论】:

        • 是的,这个脚本应该不再需要了。
        • @BradLarson 原来脚本仍然是必要的。我导入了一个在另一台计算机上构建的存档,无论出于何种原因,XCode 都不会自动符号化从该存档构建的崩溃日志。 :( 但是,使用symbolicatecrash 我仍然能够符号化崩溃。但是,我肯定更喜欢 XCode 自动符号化它,它并不总是全部。
        猜你喜欢
        • 2012-12-07
        • 2014-11-09
        • 2018-03-19
        • 1970-01-01
        • 2011-04-07
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多