如何从BugSense获取iOS崩溃报告的符号化信息?

3
我开始通过BugSense收到我的iOS应用程序的崩溃报告。我已经在我的应用程序中包含了调试符号,并获得有关错误的信息,例如“* -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array”,以及类似以下的堆栈跟踪:
Full Stacktrace  

0   CoreFoundation  __exceptionPreprocess   114
1   libobjc.A.dylib objc_exception_throw    24
2   CoreFoundation  -[__NSArrayM objectAtIndex:]    184
3   Myapp   Myapp   738167
4   UIKit   -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]    662
5   UIKit   -[UITableView _userSelectRowAtPendingSelectionIndexPath:]   130
6   Foundation  __NSFireDelayedPerform  368
7   CoreFoundation  __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__   14
8   CoreFoundation  __CFRunLoopDoTimer  850
9   CoreFoundation  __CFRunLoopRun  1088
10  CoreFoundation  CFRunLoopRunSpecific    230
11  CoreFoundation  CFRunLoopRunInMode  58
12  GraphicsServices    GSEventRunModal 114
13  GraphicsServices    GSEventRun  62
14  UIKit   -[UIApplication _run]   404
15  UIKit   UIApplicationMain   670
16  Myap p  Myapp   11901
17  Myapp   Myapp   

然而,我希望对报告进行符号化,以便可以精确定位代码中的错误。我如何从Bugsense获取报告数据并执行此操作?是否有一种方法可以下载BugSense的“常规”崩溃报告并使用它,或者他们提供的数据足够用于某种方式的工作?我知道报告来自哪个应用程序版本,因此我知道要针对哪些二进制文件进行符号化。

2
查看此处的Symbolicating iPhone APP Crash Reports,也可以考虑使用atos解决方案。 - Joe
谢谢您的建议。我尝试使用atos,但收到以下错误消息:"atos无法为架构armv7加载文件MyApp.app.dSYM的符号"。 - Jason
2
所以在我的情况下,我在Finder中展开了我的应用程序存档,然后在终端中导航到.xarchive文件。然后我进入Products/Applications目录并键入atos -arch armv7 -o MyApp.app/MyApp。现在这将使您进入交互模式,然后您只需键入地址0x738167即可。 - Joe
您正在使用哪个版本的Xcode/iOS进行开发? - Nick Toumpelis
4个回答

4
BugSense通过获取设备上的符号并将其以类似于崩溃日志的格式发布到服务器来工作。BugSense获取异常堆栈跟踪信息,但如果无法找到,则获取崩溃的线程堆栈跟踪信息。由于多种原因,这并不总是完美的。
您发布的堆栈跟踪信息部分包含符号。看起来BugSense在获取您自己代码中的符号时出了问题。
如果您完全按照使用指南进行操作,那么可能是框架本身存在问题。atos应该能帮助您发现代码中确切的方法调用。
免责声明:我编写了BugSense-iOS.framework的代码。

3
如果您使用的是免费的BugSense账户,它将不会为您解析崩溃报告。但是,您可以支付每月19美元来启用此功能。或者,您可以尝试使用我编写的Python脚本。 https://github.com/dr4ke616/Bugsense-Symbolicater

2

你也可以尝试使用Crittercism进行符号化。我已经使用了一个月,他们的符号化系统非常准确。


0

刚刚我自己也经历了这个过程。我在 Ray Wenderlich 网站上找到了一篇教程:

http://www.raywenderlich.com/33669/overview-of-ios-crash-reporting-tools-part-1

我一直在错误使用Bugsense(没有进行符号化和面包屑跟踪 >.<)。

注意:面包屑跟踪是较昂贵版本的功能。

如何将dSYM上传到Bugsense网站以对堆栈跟踪进行符号化

无论如何,从教程中,我发现我需要上传dSYM文件夹作为一个压缩文件到Bugsense。

该文件夹基本上允许原始堆栈跟踪与导致崩溃的函数调用进行符号化,并显示行号。

当您进行归档时,可以在Window > Organizer中获取归档文件。

要获取dSYM文件,您需要:

  1. 从Window > Organizer屏幕中右键单击归档文件> Show In Finder。

  2. 然后右键单击文件> Show packaged contents,这将向您显示dSYM文件夹。

  3. 右键单击并将该文件夹压缩。

  4. 登录您的bugsense账户,查找您的应用程序,转到设置页面,左侧应该有一个名为“dSYM”的选项卡。单击该选项卡,然后按“浏览&上传”按钮上传您的dSYM。

现在你可以去查看每一个bug,并点击"符号化"按钮,这将转换所有那些讨厌的东西。
0000x1aeaf390a 

将“崩溃消息”转换为类似以下的内容:
MyViewController:m110, [MyViewController objectAtIndex:17] out of bounds

每次生成新的应用程序包版本时,您需要上传相应的dSYM压缩文件到相应的存档中。

否则,如果您尝试在没有此dSYM的情况下使用Bugsense,则会得到无用的堆栈跟踪。

希望这对未来的任何人都有所帮助。祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接