如何象征崩溃日志Xcode?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何象征崩溃日志Xcode?相关的知识,希望对你有一定的参考价值。

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

答案

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

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

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

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

表示崩溃日志的最简单过程:

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

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

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

另一答案

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

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

  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

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

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

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

附:

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

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

34  Foo                    0x0033f9bb 0xd7000 + 2525627

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

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

P.P.S.

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

另一答案

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

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键

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

快乐的编码!!!

另一答案

使用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. 现在应该对整个崩溃日志进行符号化。如果没有,则右键单击并选择“重新符号化崩溃日志”
另一答案

对我来说.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
另一答案

确保您的Xcode应用程序名称不包含任何空格。这就是它不适合我的原因。所以/Applications/Xcode.app工作,而/Applications/Xcode 6.1.1.app不起作用。

另一答案

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

  1. 在管理器内部,找到应用程序所基于的存档。
  2. 单击Download Debug Symbols按钮。 “下载”文件夹中不会显示任何内容,但这没关系。
  3. 将构建计算机连接到ios设备。
  4. 在“设备和模拟器”中选择设备。
  5. 单击“查看设备日志”按钮。
  6. 将崩溃文件拖放到左侧面板。该文件必须以.crash扩展名结尾,否则拖动失败。
  7. 切换到“所有日志”选项卡。
  8. 选择添加的崩溃文件。
  9. 该文件应自动符号化,否则使用右键单击上下文菜单项Re-Symbolicate Log。
另一答案

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

  1. 查看.crash文件中的回溯,请注意第二列中二进制图像的名称,以及第三列中的地址(例如下面示例中的0x00000001000effdc)。
  2. 在回溯下,在“二进制图像”部分中,记下二进制图像(例如,元素)的图像名称,体系结构(例如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

另一答案

来自Apple的文档:

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

  • 将iOS设备连接到Mac
  • 从“窗口”菜单中选择“设备”
  • 在左列的“设备”部分下,选择一个设备
  • 单击右侧面板“设备信息”部分下的“查看设备日志”按钮
  • 将崩溃报告拖到所显示面板的左列
  • Xcode将自动对崩溃报告进行符号化并显示结果为了表示崩溃报告,Xcode需要能够找到以下内容: 崩溃的应用程序的二进制文件和dSYM文件。 应用程序链接的所有自定义框架的二进制文件和dSYM文件。对于使用应用程序从源代码构建的框架,他们的dSYM文件将与应用程序的dSYM文件一起复制到存档中。对于由第三方构建的框架,您需要向作者询问dSYM文件。 崩溃时该应用程序运行的操作系统的符号。这些符号包含特定OS版本(例如,iOS 9.3.3)中包含的框架的调试信息。 OS符号是特定于体系结构的 - 用于64位设备的iOS版本不包含armv7符号。 Xcode将自动从连接到Mac的每个设备复制OS符号。

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

以上是关于如何象征崩溃日志Xcode?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4.5 - 崩溃日志未符号化

Xcode 5.0 不符号化崩溃日志

atos 和 dwarfdump 不会象征我的地址

iOS 象征崩溃日志只象征几行

Xcode 3.2.3 不会符号化日志

Xcode 4.2 调试不象征堆栈调用