如何符号化崩溃日志Xcode?
Xcode 5组织者有一个列出所有崩溃日志的视图。 我们可以在这里拖放崩溃日志。 但是自从Xcode 6以来,我知道他们已经把设备从组织中移走了,并为此创build了一个新的窗口。 但我没有find一个地方,我查看崩溃日志,我在Xcode 5中拖放到Xcode 6后,拖放到任何地方。任何人都知道答案?
好吧,我意识到你可以这样做:
- 在
Xcode > Window > Devices
,select一个连接的iPhone / iPad / etc左上angular。 - 查看设备日志
- 所有日志
您可能在那里有很多日志,为了让日后更容易地find您导入的日志,您可以直接删除所有日志,除非它们对您有意义。 或者,除非你知道事故发生的确切时间点,否则应该写在文件中……我很懒,所以我只是删除所有的旧日志(这实际上需要一段时间)。
- 只需将文件拖放到该列表中即可。 它为我工作。
为社区写这个答案和我自己一样多。
如果有任何象征崩溃报告的问题,人们可以克服它们如下:
-
创build一个单独的文件夹,将
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选项select了正确的值(可以从Binary Images:
的第一行中获得,也可以从Hardware Model:
在崩溃报告和应用程序支持的拱形中)。
您也可以从崩溃报告中直接复制必要的地址(如线程调用堆栈)到一个文本文件中(在TextEdit中,按住Option并select必要的文本块,或复制并剪切),得到如下所示的内容:
0x000f12fb 0x002726b7 0x0026d415 0x001f933b 0x001f86d3
现在,您可以将其保存到文本文件中,例如addr.txt
,然后运行以下命令:
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
这将为所有地址一次提供一个很好的符号。
PS
在进行上述操作之前,需要检查一切设置是否正确( atos
会高兴地报告任何提供的地址)。
要进行检查,请打开崩溃报告,然后转到Thread 0
的调用堆栈的末尾。 从结束的第一行列出你的应用程序(通常是第二个),例如:
34 Foo 0x0033f9bb 0xd7000 + 2525627
应该是main()
调用。 如上所述地址(在这种情况下为0x0033f9bb
)应该确认这确实是main()
而不是一些随机的方法或函数。
如果地址不是main()
,请检查你的加载地址( -l
选项)和arch( -arch
选项)。
PPS
如果上面的代码不起作用,从iTunes Connect下载你的版本的dSYM,从dSYM(Finder> Show Package Contents)中提取可执行的二进制文件,将它复制到目录中,然后使用它(即Foo
)作为Foo.app/Foo
的参数,而不是Foo.app/Foo
。
你也可以参考这个,我已经写了手动崩溃重新象征的一步一步程序。
崩溃重新象征
步骤1
将所有上述文件(MyApp.app,MyApp-dSYM.dSYM和MyApp-Crash-log.crash)移动到一个文件夹中,方便使用terminal。
对于我来说,桌面是最容易到达的地方;)所以,我已经将这三个文件移动到桌面上的MyApp文件夹。
第2步
现在轮到Finder,从下面的适用于您的XCODE版本的path开始。
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
从这个位置复制symbolicatecrash文件,并将其粘贴到桌面/ MyApp(等等…不要盲目追随我,我粘贴文件夹MyApp中的sybolicatecrash文件,在第一步创build一个在您最喜欢的位置,有三个文件。 )
第3步
打开terminal和CD到MyApp文件夹。
cd Desktop/MyApp — Press Enter export DEVELOPER_DIR=$(xcode-select --print-path)
– 按下Enter键
./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM
– 按下Enter键
而已 !! Symbolicated日志在您的terminal上…现在您还在等什么? 现在简单地找出错误并解决它;)
快乐编码!
有一个更简单的方法使用Xcode(不使用命令行工具和查找地址一次)
-
以任何.xcarchive文件。 如果你有一个之前你可以使用它。 如果您没有,请通过运行产品>从Xcode存档来创build一个。
-
右键单击.xcarchive文件并select“Show Package Contents”
-
将dsym文件(崩溃的应用程序版本)复制到dSYMs文件夹
-
将.app文件(崩溃的应用程序版本)复制到Products> Applications文件夹
-
编辑Info.plist并编辑ApplicationProperties字典下的CFBundleShortVersionString和CFBundleVersion。 这将有助于您稍后识别存档
-
双击.xcarchive将其导入Xcode。 它应该打开主办单位。
-
回到崩溃日志(在Xcode的Devices窗口中)
-
把你的.crash文件拖到那里(如果还没有的话)
-
整个崩溃日志现在应该是象征性的。 如果没有,然后右键单击并select“重新符号崩溃日志”
确保您的Xcode应用程序名称不包含任何空格。 这是它不适合我的原因。 所以/Applications/Xcode.app
工作,而/Applications/Xcode 6.1.1.app
不起作用。
从苹果的文档:
使用Xcode的符号崩溃报告Xcode将自动尝试象征所遇到的所有崩溃报告。 所有你需要做的象征性的事情是添加崩溃报告到Xcode组织者。
- 将iOS设备连接到Mac
- 从“窗口”菜单中select“设备”
- 在左栏的“设备”部分下,select一个设备
- 单击右侧面板“设备信息”部分下的“查看设备日志”button
- 将你的崩溃报告拖到显示面板的左侧栏中
-
Xcode会自动象征崩溃报告并显示结果为了表示崩溃报告,Xcode需要能够find以下内容:
-
崩溃的应用程序的二进制和dSYM文件。
-
应用程序链接的所有自定义框架的二进制文件和dSYM文件。 对于使用应用程序的源代码构build的框架,将其dSYM文件与应用程序的dSYM文件一起复制到存档中。 对于由第三方构build的框架,您需要向作者询问dSYM文件。
-
当应用程序崩溃时运行的操作系统的符号。 这些符号包含特定OS版本(例如,iOS 9.3.3)中包含的框架的debugging信息。 OS符号是架构特定的 – 针对64位设备的iOS版本将不包括armv7符号。 Xcode会自动从您连接到Mac的每个设备上复制操作系统符号。
-
如果其中任何一个丢失Xcode可能无法象征崩溃报告,或者可能只是部分象征性的崩溃报告。
对我来说,.crash文件就够了。 没有.dSYM文件和.app文件。
我运行这两个命令在我build立档案的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