Jas*_*ien 429 crash-reports symbolicate ios
我想试着象征我的iPhone应用程序的崩溃报告.
我从iTunes Connect检索了崩溃报告.我有我提交到App Store的应用程序二进制文件,我有作为构建的一部分生成的dSYM文件.
我将所有这些文件放在一个由聚光灯索引的目录中.
现在怎么办?
我试过调用:
symbolicatecrash crashreport.crash myApp.app.dSYM
Run Code Online (Sandbox Code Playgroud)
它只是输出崩溃报告中的相同文本,而不是符号化.
难道我做错了什么?
Nav*_*han 689
从苹果分析崩溃报告的步骤:
将发布的.app文件复制到appstore,发布时创建的.dSYM文件,崩溃报告从APPLE接收到文件夹.
打开终端应用程序并转到上面创建的文件夹(使用cd
命令)
跑atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
.内存位置应该是应用程序根据报告崩溃的位置.
例如: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
这将显示导致崩溃的确切行,方法名称.
例如: [classname functionName:]; -510
象征性的IPA
如果我们使用IPA进行符号化 - 只需使用.zip重命名扩展名.ipa,然后将其解压缩,然后我们就可以得到一个包含app的Payload文件夹.在这种情况下,我们不需要.dSYM文件.
注意
这只有在应用程序二进制文件没有剥离符号时才有效.默认情况下,发布版本剥离了符号.我们可以在项目构建设置"将复制期间的调试符号"更改为NO.
更多细节见这篇文章
And*_*ber 173
在这里阅读所有这些答案以便表示崩溃日志(并最终成功)后,我认为这里缺少一些非常重要的点,以确定为什么symbolicatecrash的调用不会产生符号化输出.
在表示崩溃日志时,有3个资产必须组合在一起:
example.crash
),从XCode的组织者导出或从iTunes Connect接收..app
包(即example.app
本身包含属于崩溃日志应用程序二进制).如果您有一个.ipa
包(即example.ipa
),那么您可以.app
通过解压缩.ipa
包(即unzip example.ipa
)来提取包.然后,.app
程序包驻留在解压缩的Payload/
文件夹中..dSYM
包含调试符号的包(即example.app.dSYM
)在开始符号化之前,您应该检查所有这些工件是否匹配,这意味着崩溃日志属于您拥有的二进制文件,并且调试符号是在构建该二进制文件期间生成的符号.
每个二进制文件都由UUID引用,可以在崩溃日志文件中看到:
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
Run Code Online (Sandbox Code Playgroud)
在此提取中,崩溃日志属于具有UUID的名为example.app/example的app二进制映像aa5e633efda8346cab92b01320043dc3
.
您可以使用dwarfdump检查二进制包的UUID:
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
Run Code Online (Sandbox Code Playgroud)
之后,您应该检查您的调试符号是否也属于该二进制文件:
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
Run Code Online (Sandbox Code Playgroud)
在此示例中,所有资源都组合在一起,您应该能够表示堆栈跟踪.
继续执行symbolicatecrash
脚本:
在Xcode 8.3中,您应该能够通过调用脚本
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
Run Code Online (Sandbox Code Playgroud)
如果不存在,您可以find . -name symbolicatecrash
在Xcode.app目录中运行以查找它.
如您所见,没有给出更多参数.因此,脚本必须通过运行聚光灯搜索来查找应用程序二进制文件和调试符号.它使用调用的特定索引搜索调试符号com_apple_xcode_dsym_uuids
.您可以自己进行搜索:
mdfind 'com_apple_xcode_dsym_uuids = *'
Run Code Online (Sandbox Code Playgroud)
RESP.
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
Run Code Online (Sandbox Code Playgroud)
第一个聚光灯调用为您提供所有索引的dSYM包,第二个聚光灯调用为您.dSYM
提供具有特定UUID 的包.如果聚光灯找不到您的.dSYM
包装,那么symbolicatecrash
两者都不会.如果你做所有这些东西,例如在你的~/Desktop
聚光灯的子文件夹中应该能够找到所有东西.
如果symbolicatecrash
找到你的.dSYM
包,那么应该有如下所示的行symbolicate.log
:
@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )
Run Code Online (Sandbox Code Playgroud)
要查找您的.app
包,可以通过以下方式调用以下聚光灯搜索symbolicatecrash
:
mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"
Run Code Online (Sandbox Code Playgroud)
如果symbolicatecrash
找到你的.app
包,那么应该有以下摘录symbolicate.log
:
Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH
Run Code Online (Sandbox Code Playgroud)
如果找到所有这些资源symbolicatecrash
,则应打印出崩溃日志的符号化版本.
如果没有,您可以直接传入dSYM和.app文件.
symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log
Run Code Online (Sandbox Code Playgroud)
注意:符号化的回溯将输出到终端,而不是symbolicate.log
.
Ala*_*ers 116
使用最新版本的Xcode(3.2.2),您可以将任何崩溃报告拖放到Xcode Organizer的"设备日志"部分,它们将自动通过符号表示.我认为如果你使用Build&Archive构建该版本的应用程序(也是Xcode 3.2.2的一部分),这种方法效果最好
Sac*_*hin 72
我使用以下步骤成功完成了这项工作.
步骤1:在桌面上创建一个文件夹,我将其命名为"CrashReport"并将三个文件("MYApp.app","MyApp.app.dSYM","MYApp_2013-07-18.crash")放入其中.
第2步:打开Finder并转到应用程序,在那里你会找到Xcode应用程序,右键单击它并单击"显示包内容",然后按照这个简单的路径."目录 - >开发人员 - >平台 - > iPhoneOS.platform->开发人员- > 库 - > PrivateFrameworks- > DTDeviceKit.framework - >版本 - > A->资源"
要么
"目录 - >开发人员 - >平台 - > iPhoneOS.platform-> Developer-> Library-> PrivateFrameworks- > DTDeviceKitBase.framework - > Versions-> A-> Resources"
要么
对于Xcode 6及更高版本,路径为Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
如果找到"symbolicatecrash"文件,请将其复制并粘贴到"CrashReport"文件夹中.
第3步:启动终端,运行这3个命令
cd/Users/mac38/Desktop/CrashReport并按Enter按钮
导出DEVELOPER_DIR ="/ Applications/Xcode.app/Contents/Developer"并按Enter键
Wil*_*ken 30
更新XCODE 9
将任何 iOS设备连接到您的Mac(是物理的,是的,我知道这是愚蠢的)
等待.可能需要一分钟才能显示出来.也许这样做Command-A
,然后Delete
将加速此.
严重未记录的步骤:将从iTunesConnect获得的崩溃报告从.txt
扩展.crash
名重命名为扩展名
然后Xcode将表示崩溃报告并显示结果.
资料来源:https://developer.apple.com/library/ios/technotes/tn2151/_index.html
Ken*_*ner 28
在运行符号化崩溃之前,我还将dsym,app bundle和crash log放在同一目录中
然后我使用我的.profile中定义的这个函数来简化运行symbolicatecrash:
function desym
{
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}
Run Code Online (Sandbox Code Playgroud)
那里添加的论据可能对你有帮助.
您可以通过运行命令来检查以确保聚光灯"看到"您的dysm文件:
mdfind 'com_apple_xcode_dsym_uuids = *'
Run Code Online (Sandbox Code Playgroud)
查找目录中的dsym.
注意:从最新的Xcode开始,不再有Developer目录.你可以在这里找到这个工具:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers离子/ A /资源/ symbolicatecrash
ave*_*dev 28
我在我的应用程序中使用Airbrake,它在远程错误记录方面做得相当不错.
如果回溯需要它,我就用atos来表示它们:
在Xcode(4.2)中,转到组织者,右键单击生成.ipa文件的存档.
在终端中,例如进入xcarchiveMyCoolApp 10-27-11 1.30 PM.xcarchive
输入以下内容atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(不要忘记单引号)
我没有在该电话中包含我的符号.你得到的是空行上的块光标.
然后我将符号代码复制/粘贴到该块光标处,然后按Enter键.你会看到类似的东西:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
你回到了一个块光标,你可以粘贴其他符号.
能够通过你的回溯一个项目而无需重新进入第一位是一个很好的节省时间.
请享用!
Adi*_*wal 20
只是xcode 6.1.1的简单和更新的答案.
脚步
1.Xcode>窗口>设备.
2.从"设备"部分下的设备列表中选择设备.
3.选择查看设备日志.
4.在All Logs部分下,您可以直接拖放report.crash
5.Xcode会自动为您报告崩溃报告.
6.您可以通过将其日期/时间与崩溃报告中提到的日期/时间相匹配来查找符号化崩溃报告.
Sam*_*m B 14
虽然我已经开发了几年的应用程序,这是我第一次调试二进制文件,我觉得这是一个完整的NOOB,可以找出所有文件的位置,即*.app*.dSYM和崩溃日志在哪里?我必须阅读多个帖子才能弄明白.图片胜过千言万语,我希望此帖可以帮助其他人.
1-首先转到itunesconnect并下载崩溃日志.注意:在大多数情况下,您可能会收到"提交的报告太少而无法显示报告".基本上没有足够的用户向Apple提交崩溃日志报告,在这种情况下,您无法做任何事情.
2-现在,如果你没有更改代码,因为你已将二进制文件提交给Apple,然后为该项目启动Xcode并再次执行Product - > Archive.否则,只需找到您最新提交的二进制文件并右键单击它.
使用XCode 4,任务更简单:
瞧.日志文件将自动导入并符号化.如果您使用XCode - >产品 - >存档首先存档构建
在XCode 4.2.1中,打开Organizer,然后转到Library/Device Logs并将.crash文件拖到崩溃日志列表中.几秒钟后它会象征着你.请注意,您必须使用与原始构建存档相同的XCode实例(即构建的存档必须存在于管理器中).
Magical XCode Organizer对于象征我的应用程序并不神奇.对于我从Apple提交的失败申请中获得的崩溃报告,我根本没有任何符号.
我尝试使用命令行,将崩溃报告放在.app文件(我提交给商店)和.dSYM文件所在的文件夹中:
$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"
Run Code Online (Sandbox Code Playgroud)
这只为我的应用程序而不是核心基础代码提供了符号,但它比组织者给我的数字转储更好,并且足以让我找到并修复我的应用程序所具有的崩溃.如果有人知道如何扩展它以获得基金会符号,将不胜感激.
在我的情况下,我将崩溃报告直接从Mail拖到管理器.出于某种原因,这阻止了崩溃报告的象征性(我很想知道原因).
首先将崩溃报告复制到桌面,然后将它们从那里拖动到管理器,使它们符号化正确.
非常具体的情况,我知道.但我想我会分享以防万一.
归档时间: |
|
查看次数: |
239211 次 |
最近记录: |