Xcode 5组织者有一个视图,列出所有崩溃日志。我们可以在这里拖放崩溃日志。但是从Xcode 6开始,我知道他们已经将设备从组织中移出,并为此设置了一个新窗口。但我没有找到一个地方,我在查看Xcode 6后,我在Xcode 5中拖放了崩溃日志。任何人都知道答案?
好的,我意识到你可以这样做:
Xcode > Window > Devices
中,选择左上角连接的iPhone / iPad /等。你可能在那里有很多日志,并且为了以后更容易找到你导入的日志,你可以在这一点上继续删除所有日志...除非它们对你有意义。或者,除非你知道崩溃发生的确切时间点 - 它应该写在文件中...无论如何......我很懒,所以我只删除所有旧日志(这实际上需要一段时间)。
表示崩溃日志的最简单过程:
等待5秒。砰!堆栈跟踪中的应用程序调用将被符号化!你可能仍然会看到很多符号!那些是内部库和框架调用。
这是最简单的,经过测试和测试的!
写这个答案对于社区和我自己一样多。
如果出现了表示崩溃报告的问题,可以按如下方式克服:
Foo.app
和Foo.app.dSYM
从相应的.xcarchive
复制到该文件夹中。同时将.crash
报告复制到该文件夹中。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(-arch
选项)。
P.P.S.
如果上述因bitcode而无效,请从iTunes Connect下载构建版本的dSYM,从dSYM(Finder> Show Package Contents)中提取可执行二进制文件,将其复制到目录中,然后使用它(即Foo
) atos
的论点,而不是Foo.app/Foo
。
您也可以参考这个,我已经编写了手动崩溃重新符号的一步一步程序。
步骤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有一种更简单的方法(不使用命令行工具并一次查找一个地址)
对我来说.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中的这些步骤,在同一台机器上的应用程序构建中表示崩溃日志:
如果.dSYM和.crash文件位于同一子文件夹中,则可以采取以下步骤:
$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc
-[AtomicElementViewController myTransitionDidStop:finished:context:]
来自Apple的文档:
使用Xcode Xcode对崩溃报告进行符号化将自动尝试对其遇到的所有崩溃报告进行符号化。您需要为符号化做的只是将崩溃报告添加到Xcode Organizer。
如果缺少其中任何一个,Xcode可能无法表示崩溃报告,或者可能只是部分地表示崩溃报告。