如何象征崩溃日志Xcode?

Nit*_*Pai 176 xcode ios

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

Sea*_*bet 241

写这个答案对于社区和我自己一样多.

如果出现了表示崩溃报告的问题,可以按如下方式克服:

  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

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

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

0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3
Run Code Online (Sandbox Code Playgroud)

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

xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
Run Code Online (Sandbox Code Playgroud)

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

PS

在执行上述操作之前,值得检查一切是否正确设置(因为atos基本上可以报告任何提供的地址).

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

34  Foo                    0x0033f9bb 0xd7000 + 2525627
Run Code Online (Sandbox Code Playgroud)

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

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

PPS

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

  • 不要忘记验证崩溃报告是否与可执行文件和dSYM匹配.您可以通过运行`xcrun dwarfdump --uuid <path to executable>将二进制映像部分<>下的标识符与可执行文件返回的标识符进行匹配来检查这一点. (10认同)
  • 我写了一个简单的bash脚本,可以为你完成大部分工作.用法:`./ symbolicate.sh mycrash.crash MyApp.app arch64 output.crash`只有它会表示完整的崩溃报告,并为您提供符号化版本.https://gist.github.com/nathan-fiscaletti/b58b642f78a4f60274e3be703e230140 (4认同)
  • 感谢您编写mini xcrun教程并使用完整性检查部分更新它的麻烦.在看到很多咒骂之后,我的理智得以拯救 (2认同)
  • 重要的是要注意,只有来自您的应用程序(Foo)的符号才会显示出来.它不会显示来自外部库/框架的符号,例如Foundation或libsystem_kernel.dylib. (2认同)

Mru*_*rug 165

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

崩溃重新符号化

步骤1

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

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

第2步

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

Xcode 8,Xcode 9 symbolicatecrash

Xcode 7.3 find /Applications/Xcode.app -name symbolicatecrash

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

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

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

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

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

第3步

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

cd Desktop/MyApp?—?Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)
Run Code Online (Sandbox Code Playgroud)

 -  按Enter键

./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM
Run Code Online (Sandbox Code Playgroud)

 -  按Enter键

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

快乐的编码!!!

  • 工作了 - 谢谢.只有一件事我必须使用导出DEVELOPER_DIR =/Applications/XCode.app/Contents/Developer(不带引号). (7认同)
  • @EmilVikström:感谢您的建议,更新了答案. (2认同)
  • 使用export DEVELOPER_DIR =`xcode-select --print-path` (2认同)
  • 更新; 这里是 ; 对于xcode7,在这里找到symbolicatecrash; 每个http:// stackoverflow /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash .COM /问题/ 32804611 /如何对symbolicate崩溃日志与 - Xcode的-7 (2认同)
  • 嗯,它只象征着除了我的应用程序目标的符号之外的所有内容,我为...提供了 dsym (2认同)
  • 这有效!您可以将符号化日志写入文件以进行记录和更好的处理,而不是通过控制台进行搜索;只需将 symbolicate 命令更改为: `./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM | xargs &gt;&gt; symbolicated_crash_log` 这会将符号化日志写入指定文件。 (2认同)

Jon*_*nny 105

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

  1. Xcode > Window > Devices,选择左上角连接的iPhone/iPad /等.
  2. 查看设备日志
  3. 所有日志

你可能在那里有很多日志,并且为了以后更容易找到导入的日志,你可以继续删除所有日志......除非它们对你有意义.或者除非你知道崩溃发生的确切时间点 - 它应该写在文件中...无论如何......我很懒,所以我只删除所有旧日志(这实际上需要一段时间).

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

  • 为了使您的崩溃文件可以拖放到该列表中,它应该具有扩展名`.crash`. (54认同)
  • 我遇到了同样的问题,但这并没有解决我的问题 - 我拖放到窗口中的日志出现了,但没有符号化. (12认同)
  • 诀窍是您必须连接设备并从列表中选择设备.如果没有设备,我认为这是不可能的. (9认同)
  • 对我来说缺少的一步是一旦文件被删除我需要右键单击文件并重新符号化日志 (5认同)
  • 不要忘记在Organizer中为该档案"下载dSYM". (5认同)
  • 对于无法拖放文件的人来说,如果您收到了 .ips,则不能只是将其扩展名更改为 .crash,您需要在文本编辑器中打开 .ips 文件,将内容复制到新文件并将其另存为 .crash 然后它就可以工作了。 (3认同)
  • 该符号假定您使用相同的Xcode构建了崩溃的二进制文件,或者至少Xcode可以访问相关的dsym文件。 (2认同)
  • 我无法将崩溃日志拖放到该列表中,知道是什么问题吗?我试图象征我从苹果评论小组获得的.ips日志 (2认同)
  • 不再起作用(xCode 10.1)。无法将崩溃报告拖到左列 (2认同)

Mar*_*uch 22

对我来说.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
Run Code Online (Sandbox Code Playgroud)

  • @rustyMagnet的工作方式是使用计算机上已归档版本中的dsyms。 (3认同)
  • 是的,这仅适用于您使用 Xcode 存档的构建,不适用于您可能为临时运行生成的任何其他构建,然后您想要为其表示崩溃日志。 (3认同)

RPM*_*RPM 20

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

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

  2. 右键单击.xcarchive文件并选择"显示包内容"

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

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

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

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

  7. 返回崩溃日志(在Xcode的Devices窗口中)

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

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

  • 你的回答是正确和简单的。无需使用终端应用程序。.xcarchive 文件夹的重新创建非常重要,因为在某些持续集成系统中没有 .xcarchive 文件,而不是 .app.dSYM 文件夹的 zip 球。巧了,我昨天做的和你说的一模一样。 (2认同)
  • 如果拖动不起作用怎么办?该文件确实具有 .crash 扩展名,但窗口拒绝它(它在向后移动时执行动画)。无论我将其拖动到何处,也无论我是否选择了“所有日志”。 (2认同)

Sur*_*mas 13

Xcode 11.2.1,2019 年 12 月

Apple 为您提供 .txt 格式的崩溃日志,这是无符号的

**

连接设备后

**

  • 下载“.txt”文件,将扩展名更改为“.crash” 在此处输入图片说明
    • 从 Xcode 的窗口选项卡打开设备和模拟器
    • 选择设备并选择设备日志
    • 将 .crash 文件拖放到设备日志窗口

在此处输入图片说明

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

有关符号化崩溃日志的更多详细信息,请参阅链接


Vic*_*dan 10

如果您在同一个子文件夹中有 .dSYM 和 .crash 文件,您可以采取以下步骤:

  1. 查看 .crash 文件中的回溯,注意第二列中二进制图像的名称,以及第三列中的地址(例如,下面示例中的 0x00000001000effdc)。
  2. 在回溯下方,在“二进制图像”部分,注意二进制图像(例如 TheElements)的图像名称、体系结构(例如 arm64)和加载地址(在下面的示例中为 0x1000e4000)。
  3. 执行以下操作:

$ 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


Ely*_*Ely 7

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

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

  • 起初我不认为这会给其他帖子添加任何内容,但前两个步骤,特别是“下载调试符号”,似乎是我所缺少的。谢谢你。 (3认同)