Xcode 5组织者有一个视图,其中将列出所有崩溃日志。我们可以在此处拖放坠毁日志。但是从Xcode 6开始,我知道他们已经将设备移出了组织范围,并为它们设置了新窗口。但是我没有找到可以查看崩溃日志的地方,该崩溃日志是在升级到Xcode 6之后在Xcode 5中拖放的。有人知道答案吗?
Xcode 5组织者有一个视图,其中将列出所有崩溃日志。我们可以在此处拖放坠毁日志。但是从Xcode 6开始,我知道他们已经将设备移出了组织范围,并为它们设置了新窗口。但是我没有找到可以查看崩溃日志的地方,该崩溃日志是在升级到Xcode 6之后在Xcode 5中拖放的。有人知道答案吗?
Answers:
好的,我意识到您可以执行以下操作:
Xcode > Window > Devices
,选择左上方已连接的iPhone / iPad / etc。您可能在那里有很多日志,并且为了便于以后查找导入的日志,您可以直接删除所有日志...除非它们对您来说意味着金钱。或者,除非您知道崩溃发生的确切时间点-无论如何应该将其写入文件...我很懒,所以我只删除了所有旧日志(这实际上花了一段时间)。
.crash
。
为社区以及为我自己写这个答案。
如果遇到表示崩溃报告的问题,可以按以下方法解决:
创建一个单独的文件夹,并将Foo.app
其Foo.app.dSYM
从对应.xcarchive
的文件夹复制到该文件夹中。还将.crash
报告复制到文件夹中。
在TextEdit或其他地方打开崩溃报告,转到该Binary Images:
部分,然后在其中复制第一个地址(例如0xd7000
)。
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
选件)。
PPS
如果由于位码导致上述方法不起作用,请从iTunes Connect下载用于构建的dSYM,从dSYM中提取可执行二进制文件(“ Finder”>“ Show Package Contents”),将其复制到目录中,然后将其Foo
用作目录。论证atos
而非Foo.app/Foo
。
xcrun dwarfdump --uuid <path to executable>
./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash
只有它会符号化完整的崩溃报告,并为您提供符号化版本。 gist.github.com/nathan-fiscaletti/...
您也可以参考这一步,我已经编写了“ 手动崩溃重新符号化”的分步过程。
第1步
将上述所有文件(MyApp.app,MyApp-dSYM.dSYM和MyApp-Crash-log.crash)移动到具有方便名称的文件夹中,无论您在何处可以轻松地使用Terminal。
对我来说,桌面是最容易到达的地方;)因此,我将这三个文件移到了桌面的MyApp文件夹中。
第2步
现在轮到Finder了,从适用于您的XCODE版本的任何一个开始的路径。
使用此命令查找symbolicatecrash
脚本文件,
find /Applications/Xcode.app -name symbolicatecrash
Xcode 8,Xcode 9,Xcode 11 /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(请等一下。不要盲目跟着我,我将sybolicatecrash文件粘贴到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
而已 !!符号日志在您的终端上……现在您还在等什么呢?现在简单地,找出错误并解决它;)
快乐编码!
xcode-select --print-path
对我来说.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的简便方法(无需使用命令行工具,一次只查找一个地址)
取得任何.xcarchive文件。如果您之前有一个,可以使用它。如果您没有,请通过从Xcode运行产品>存档来创建一个。
右键单击.xcarchive文件,然后选择“显示软件包内容”
将dsym文件(已崩溃的应用程序的版本)复制到dSYMs文件夹
将.app文件(已崩溃的应用程序的版本)复制到“产品”>“应用程序”文件夹中
编辑Info.plist并编辑ApplicationProperties词典下的CFBundleShortVersionString和CFBundleVersion。这将帮助您以后识别存档
双击.xcarchive,将其导入Xcode。它应该打开管理器。
返回崩溃日志(在Xcode的“设备”窗口中)
将您的.crash文件拖到那里(如果尚不存在)
整个崩溃日志现在都应该用符号表示。如果不是,请右键单击并选择“重新符号化崩溃日志”
请按照Xcode 10中的以下步骤来表示来自同一计算机上的应用程序构建的崩溃日志:
如果在同一子文件夹中有.dSYM和.crash文件,则可以执行以下步骤:
$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc
-[AtomicElementViewController myTransitionDidStop:finished:context:]
确保您的Xcode应用程序名称不包含任何空格。这就是它对我不起作用的原因。因此/Applications/Xcode.app
有效,但/Applications/Xcode 6.1.1.app
不起作用。
Xcode 11.2.1,2019年12月
Apple为您提供.txt格式的崩溃日志,该日志没有符号化
**
连接设备
**
我们将能够在那看到符号化的崩溃日志
请参阅链接以获取更多有关符号崩溃日志的详细信息
从苹果的文档:
使用Xcode象征崩溃报告Xcode会自动尝试象征它遇到的所有崩溃报告。您需要做的符号化工作就是将崩溃报告添加到Xcode Organizer。
Xcode将自动符号化崩溃报告并显示结果要符号化崩溃报告,Xcode需要能够找到以下内容:
崩溃的应用程序的二进制文件和dSYM文件。
应用程序链接到的所有自定义框架的二进制文件和dSYM文件。对于使用应用程序从源构建的框架,将其dSYM文件与应用程序的dSYM文件一起复制到存档中。对于由第三方构建的框架,您将需要向作者索要dSYM文件。
崩溃时正在运行该应用程序的操作系统的符号。这些符号包含特定OS版本(例如iOS 9.3.3)中包含的框架的调试信息。操作系统符号是特定于体系结构的-适用于64位设备的iOS版本不会包含armv7符号。Xcode将自动从您连接到Mac的每个设备中复制OS符号。
如果缺少这些,则Xcode可能无法符号化崩溃报告,或者只能部分符号化崩溃报告。