如何象征崩溃日志Xcode?

时间:2014-09-15 19:22:02

标签: ios xcode

Xcode 5组织者有一个列出所有崩溃日志的视图。我们可以在这里拖放崩溃日志。但是从Xcode 6开始,我知道他们已经将设备从组织中移出,并为此设置了一个新窗口。但是我没有找到一个地方,我在查看Xcode 5后,在Xcode 5中拖放了崩溃日志。有人知道答案吗?

13 个答案:

答案 0 :(得分:230)

尽可能为社区写这个答案。

如果在表示崩溃报告时遇到问题,可以按如下方式克服这些问题:

  1. 创建一个单独的文件夹,将Foo.appFoo.app.dSYM从相应的.xcarchive复制到该文件夹​​中。同时将.crash报告复制到文件夹中。

  2. 在TextEdit或其他地方打开崩溃报告,转到Binary Images:部分,然后复制其中的第一个地址(例如0xd7000)。

  3. cd进入该文件夹。现在您可以运行以下命令:

    xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb

  4. 这将表示地址0x0033f9bb处的符号。请确保为-arch选项选择正确的值(可以从Binary Images:部分的第一行获取,或者从崩溃报告中的Hardware Model:和应用程序中找到支持的拱门)。

    您还可以将崩溃报告中的必要地址(例如线程调用堆栈)直接复制到文本文件中(在TextEdit中,按住Option并选择必要的文本块,或复制和剪切),以获得类似这样的内容:

    0x000f12fb
    0x002726b7
    0x0026d415
    0x001f933b
    0x001f86d3
    

    现在您可以将其保存到文本文件中,例如addr.txt,然后运行以下命令:

    xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
    

    这将立即为所有地址提供一个很好的符号。

    <强> P.S。

    在执行上述操作之前,值得检查一切是否正确设置(因为atos会很乐意为基本上任何提供的地址报告一些内容。)

    要进行检查,请打开崩溃报告,然后转到Thread 0的调用堆栈的末尾。从结尾开始列出你的应用程序的第一行(通常是第二行),例如:

    34  Foo                    0x0033f9bb 0xd7000 + 2525627
    

    应该是main()来电。如上所述,对地址进行符号化(在这种情况下为0x0033f9bb)应该确认这确实是main()而不是一些随机方法或函数。

    如果地址不是main()的地址,请检查加载地址(-l选项)和拱门(-arch选项)。

    <强> P.P.S。

    如果上述因 bitcode 而无效,请从iTunes Connect下载构建版本的dSYM,从dSYM(Finder&gt; Show Package Contents)中提取可执行二进制文件,将其复制到目录,并使用它(即Foo)作为atos的参数,而不是Foo.app/Foo

答案 1 :(得分:149)

您也可以参考这个,我已经逐步编写了手动崩溃重新符号化的程序。

Crash Re-Symbolication

第1步

将所有上述文件(MyApp.app,MyApp-dSYM.dSYM和MyApp-Crash-log.crash)移动到一个方便名称的文件夹中,方便您轻松使用终端。

对我来说,桌面是最容易到达的地方;) 因此,我已将这三个文件移动到桌面上的MyApp文件夹中。

第2步

现在轮到Finder,转到以下适用于您的XCODE版本的路径。

使用此命令查找symbolicatecrash脚本文件,
find /Applications/Xcode.app -name symbolicatecrash

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

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

XCode 7 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

Xcode 6 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

然后降低Xcode 6 Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

或者     Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources

第3步

将找到的symbolicatecrash脚本文件的目录添加到$PATH env变量中,如下所示:sudo vim /etc/paths.d/Xcode-symbolicatecrash并粘贴脚本文件的目录并保存文件。打开新终端时,您可以在任意文件夹中调用symbolicatecrash作为/usr/bin中的命令。

或者

从此位置复制symbolicatecrash文件,并将其粘贴到Desktop / MyApp (等等......不要盲目跟我,我在MyApp文件夹中粘贴sybolicatecrash文件,你在最喜欢的位置在第一步创建的文件,有三个文件。)

第4步

打开终端,将CD发送到MyApp文件夹。

cd Desktop/MyApp — Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)

- 按Enter键

./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM

- 按Enter键

就是这样!符号化的日志在你的终端上...... 那你在等什么?现在简单地说,找出错误并解决它;)

快乐编码!!!

答案 2 :(得分:100)

好的,我意识到你可以这样做:

  1. Xcode > Window > Devices中,选择左上角连接的iPhone / iPad /等。
  2. 查看设备日志
  3. 所有日志
  4. 您可能在那里有很多日志,并且为了以后更容易找到导入的日志,您可以在此时继续删除所有日志...除非它们对您有意义。或者除非你知道崩溃发生的确切时间点 - 它应该写在文件中...我很懒,所以我只删除所有旧日志(这实际上需要一段时间)。

    1. 只需将文件拖放到该列表中即可。它对我有用。

答案 3 :(得分:19)

使用Xcode有一种更简单的方法(不使用命令行工具并一次查找一个地址)

  1. 获取任何.xcarchive文件。如果你有一个之前你可以使用它。如果您没有,请通过运行产品&gt;创建一个。从Xcode存档。

  2. 右键单击.xcarchive文件,然后选择“显示包内容&#39;

  3. 将dsym文件(崩溃的应用程序版本)复制到dSYMs文件夹

  4. 将.app文件(崩溃的应用程序版本)复制到Products&gt;应用程序文件夹

  5. 编辑Info.plist并编辑ApplicationProperties字典下的CFBundleShortVersionString和CFBundleVersion。这有助于您稍后识别存档

  6. 双击.xcarchive将其导入Xcode。它应该打开管理器。

  7. 返回崩溃日志(在Xcode的“设备”窗口中)

  8. 将.crash文件拖放到那里(如果尚未存在)

  9. 现在应该对整个崩溃日志进行符号化。如果没有,请右键单击并选择“重新符号化崩溃日志”

答案 4 :(得分:12)

对我来说.crash文件已经足够了。没有.dSYM文件和.app文件。

我在mac上运行了这两个命令,我在那里构建了存档并且它有效:

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

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash  /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash

答案 5 :(得分:5)

按照Xcode 10中的这些步骤来表示来自同一台计算机上构建的应用程序的崩溃日志:

  1. 整理器中,找到应用所基于的存档。
  2. 点击下载调试符号按钮。什么都不会出现在“下载”文件夹中,但是没关系。
  3. 将构建机器连接到iOS设备。
  4. 设备和模拟器中选择设备。
  5. 点击查看设备日志按钮。
  6. 将崩溃文件拖放到左侧面板。该文件必须以 .crash 扩展名结尾,否则拖动将失败。
  7. 切换到所有日志标签。
  8. 选择添加的崩溃文件。
  9. 文件应自动符号化,否则请使用右键单击上下文菜单项重新符号化日志

答案 6 :(得分:4)

确保您的Xcode应用程序名称不包含任何空格。这就是它不适合我的原因。因此/Applications/Xcode.app有效,而/Applications/Xcode 6.1.1.app无效。

答案 7 :(得分:3)

如果.dSYM和.crash文件位于同一子文件夹中,则可以采取以下步骤:

  1. 查看.crash文件中的回溯,请注意第二列中二进制图像的名称,以及第三列中的地址(例如下例中的0x00000001000effdc)。
  2. 只是在回溯中,在二进制图像&#34;请注意二进制图像的图像名称,体系结构(例如arm64)和加载地址(下例中为0x1000e4000)(例如TheElements)。
  3. 执行以下操作:
  4. $ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc -[AtomicElementViewController myTransitionDidStop:finished:context:]

    权威来源:https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS

答案 8 :(得分:2)

来自Apple的文档:

用Xcode表示崩溃报告 Xcode将自动尝试对其遇到的所有崩溃报告进行符号化。您需要为符号化做的只是将崩溃报告添加到Xcode Organizer。

  • 将iOS设备连接到Mac
  • 从“窗口”菜单中选择“设备”
  • 在左栏的“设备”部分下,选择设备
  • 单击右侧面板“设备信息”部分下的“查看设备日志”按钮
  • 将崩溃报告拖到所显示面板的左栏
  • Xcode会自动对崩溃报告进行符号化并显示结果 为了表示崩溃报告,Xcode需要能够找到以下内容:

    1. 崩溃的应用程序的二进制文件和dSYM文件。

    2. 应用程序链接的所有自定义框架的二进制文件和dSYM文件。对于使用应用程序从源代码构建的框架,他们的dSYM文件将与应用程序的dSYM文件一起复制到存档中。对于由第三方构建的框架,您需要向作者询问dSYM文件。

    3. 崩溃时该应用程序运行的操作系统的符号。这些符号包含特定OS版本(例如,iOS 9.3.3)中包含的框架的调试信息。 OS符号是特定于体系结构的 - 用于64位设备的iOS版本不包含armv7符号。 Xcode将自动从连接到Mac的每个设备复制OS符号。

如果缺少其中任何一个,Xcode可能无法表示崩溃报告,或者可能只是部分地表示崩溃报告。

答案 9 :(得分:1)

最简单的象征崩溃日志的过程:

  1. 在IPA构建过程中保留组织者的xcarchive文件以备将来使用。
  2. 当崩溃发生时,请从受影响的设备收集崩溃日志。扩展名应为.crash。如果崩溃日志为.ips格式,只需将其重命名为.crash。
  3. 双击存储路径中的xcarchive,使其显示在管理器中(如果尚不存在)。
  4. 在xcode窗口中打开->设备和模拟器->查看设备日志->所有日志->拖放.crash文件。

等待5秒钟。砰!堆栈跟踪中的应用程序调用将被符号化! 您可能仍然会看到很多符号!这些是内部库和框架调用。

这是最简单的方法,经过尝试和测试!

答案 10 :(得分:1)

  

Apple为您提供了.txt格式的崩溃日志,该符号没有符号化

**

  

已连接设备

**

  
      
  • 下载“ .txt”文件,将扩展名更改为“ .crash”   enter image description here      
        
    • 从Xcode的“窗口”标签中打开设备和模拟器
    •   
    • 选择设备并选择设备日志
    •   
    • 将.crash文件拖放到设备日志窗口中
    •   
  •   

enter image description here

我们将能够在那看到符号化的崩溃日志

有关符号化Crash logs

的更多信息,请参见链接。

答案 11 :(得分:0)

Xcode 11.2.1,2019年12月

  

Apple为您提供了.txt格式的崩溃日志,该符号没有符号化

**

  

已连接设备

**

  
      
  • 下载“ .txt”文件,将扩展名更改为“ .crash”   enter image description here      
        
    • 从Xcode的“窗口”标签中打开设备和模拟器
    •   
    • 选择设备并选择设备日志
    •   
    • 将.crash文件拖放到设备日志窗口中
    •   
  •   

enter image description here

我们将能够在那看到符号化的崩溃日志

有关符号化Crash logs

的更多信息,请参见链接。

答案 12 :(得分:0)

我一直在努力让崩溃报告通过 atos 进行符号化,但我很不情愿,因为这个过程看起来很麻烦,但我在 Xcode-> 窗口 -> 管理器 -> 崩溃(在左侧菜单中)Xcode 中找到了崩溃报告将自动下载崩溃日志并自动进行符号化,从那里您可以轻松找到崩溃的原因。

enter image description here