Xcode 5的管理器有一个视图,可以列出所有的崩溃日志。我们可以拖放这里的崩溃日志。但自从Xcode 6以来,我知道他们已经将设备移出了组织,并为相同的设置了一个新的窗口。但我没有找到一个地方,我查看崩溃日志,我拖拽在Xcode 5后上升到Xcode 6。有人知道答案吗?


当前回答

写这个答案既是为了社区,也是为了我自己。

如果在事故报告中出现了问题,可以通过以下方法加以解决:

创建一个单独的文件夹,复制Foo。app和Foo.app.dSYM从对应的.xcarchive文件夹中。同时将.crash报告复制到文件夹中。 在TextEdit或其他地方打开崩溃报告,转到Binary Images:部分,并复制第一个地址(例如0xd7000)。 CD放入文件夹。现在可以执行如下命令: xrun atos -o Foo。app/Foo -arch arm64 -l 0xd7000 0x0033f9bb .使用实例

这将表示地址为0x0033f9bb的符号。请确保为-arch选项选择正确的值(可以从Binary Images:部分中的第一行获得,或从硬件模型:在崩溃报告和应用程序支持的arch中计算出来)。

你也可以直接从崩溃报告中复制必要的地址(例如线程调用堆栈)到一个文本文件中(在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会很高兴地为基本上任何提供的地址报告一些内容)。

要进行检查,请打开崩溃报告,并转到线程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)中提取可执行二进制文件,将其复制到目录中,并使用它(即Foo)作为atos的参数,而不是Foo.app/Foo。

其他回答

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

在Xcode > Window > Devices中,选择连接的iPhone/iPad/etc左上角。 查看设备日志 所有日志

您可能在那里有很多日志,为了便于稍后找到导入的日志,您可以在此时删除所有日志……除非他们对你来说意味着金钱。或者除非你知道崩溃发生的确切时间点——无论如何都应该写在文件中……我很懒,所以我只是删除所有旧的日志(这实际上花了一段时间)。

3 a。确保日志文件的扩展名为.crash(而不是.txt或.ips)

只需将文件拖放到该列表中。这对我很管用。

写这个答案既是为了社区,也是为了我自己。

如果在事故报告中出现了问题,可以通过以下方法加以解决:

创建一个单独的文件夹,复制Foo。app和Foo.app.dSYM从对应的.xcarchive文件夹中。同时将.crash报告复制到文件夹中。 在TextEdit或其他地方打开崩溃报告,转到Binary Images:部分,并复制第一个地址(例如0xd7000)。 CD放入文件夹。现在可以执行如下命令: xrun atos -o Foo。app/Foo -arch arm64 -l 0xd7000 0x0033f9bb .使用实例

这将表示地址为0x0033f9bb的符号。请确保为-arch选项选择正确的值(可以从Binary Images:部分中的第一行获得,或从硬件模型:在崩溃报告和应用程序支持的arch中计算出来)。

你也可以直接从崩溃报告中复制必要的地址(例如线程调用堆栈)到一个文本文件中(在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会很高兴地为基本上任何提供的地址报告一些内容)。

要进行检查,请打开崩溃报告,并转到线程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)中提取可执行二进制文件,将其复制到目录中,并使用它(即Foo)作为atos的参数,而不是Foo.app/Foo。

确保你的Xcode应用名称不包含任何空格。这就是它对我不起作用的原因。所以/应用程序/ Xcode。/Applications/Xcode应用程序不能工作。

您需要访问包含DWARF文件的. dsym包(文件夹),并且应该使用编辑器打开.crash文件。

查看回溯部分,你应该会看到如下内容:

...
13  TheElements                         0x0000000100f62ca0 0x100f5c000 + 27808
14  UIKitCore                       0x00000001843e3044 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 356 (UIApplication.m:2328)
...

Binary Images:
0x100f5c000 - 0x101673fff TheElements arm64 ...
...

注意stacktrace部分的第3列(0x0000000100f62ca0)中的长地址。 注意第4列中的简短地址(0x100f5c000) 注意二进制图像部分的架构(arm64) 执行以下操作:

$ atos -arch <arch> -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l <short_address> <long_address>

你应该得到这样的结果:

-[AtomicElementViewController myTransitionDidStop:finished:context:]

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

注意:如果由于任何原因你无法访问. dsym文件,你可以使用Xcode>Product>Archive重新创建.xcarchive,但要确保你构建的是完全相同的代码。然后可以从.xcarchive包中提取符号。

你也可以参考这个,我已经写了手动崩溃重新符号化的步骤。

崩溃Re-Symbolication

步骤1

移动上面所有的文件(MyApp。应用,MyApp-dSYM。dSYM和MyApp-Crash-log.crash)到一个文件夹,有一个方便的名字,你可以很容易地使用终端。

对我来说,桌面是最容易到达的地方;) 所以,我已经把这三个文件移动到桌面的MyApp文件夹。

步骤2

现在轮到Finder了,去到下面的路径,无论哪个适用于你的XCODE版本。

使用此命令查找symbolicatecrash脚本文件, 找到/应用程序/ Xcode。应用程序名称symbolicatcrash

Xcode 7.3和更新版本(Xcode 8,…, Xcode 14,…):/ application /Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

步骤3

将找到的symbolicatecrash脚本文件的目录添加到$PATH env变量中,如下所示d/ xcode - symbolicatcrash,粘贴脚本文件的目录并保存。当打开一个新终端时,您可以在位于/usr/bin中的任何文件夹中调用symbolicatecrash命令。

Or

复制符号崩溃文件从这个位置,并将其粘贴到桌面/MyApp (等等……不要盲目地跟着我,我正在MyApp文件夹中粘贴符号崩溃文件,这是你在第一步中创建的,在你最喜欢的位置,有三个文件。)

步骤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

就是这样!符号日志在您的终端上… 现在简单地,找出错误并解决它;)