如何从 BugSense 符号化 iOS 崩溃报告?
我开始通过 BugSense 从我的 iOS 应用程序接收崩溃报告。我已将调试符号包含在我的应用程序中,并获取有关错误的信息,例如。 “* -[NSMutableArray objectAtIndex:]:索引 0 超出空数组的范围”以及堆栈跟踪,例如:
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
但是,我想对报告进行符号化,以便我可以准确地指出 bug 所在的位置代码。我如何从 Bugsense 获取报告数据并执行此操作?有没有办法从 BugSense 下载“常规”崩溃报告并使用它,或者他们提供的数据是否足以以某种方式工作?我知道报告来自哪个版本的应用程序,所以我知道要针对哪些二进制文件进行符号化。
I am beginning to receive crash reports from my iOS app via BugSense. I have included the debug symbols in my app and an getting info on the errors, eg. "* -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array" and also stacktraces such as:
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
However, I want to symbolicate the reports so that I can pinpoint exactly where the bugs are in my code. How can I take the report data from Bugsense and do this? Is there a way to download the "regular" crash report from BugSense and use that, or is the data they provide enough to work off of somehow? I know which version of the app that the reports are coming from so i know which binaries to symbolicate against.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
BugSense 的工作原理是获取设备上的符号并将其发布到服务器上,其格式类似于您在崩溃日志中看到的格式。 BugSense 获取异常堆栈跟踪,如果找不到,则获取崩溃线程堆栈跟踪。由于多种原因,这并不总是完美的。
您发布的堆栈跟踪已部分符号化。 BugSense 似乎在获取您自己的代码中的符号时遇到问题。
如果您完全按照使用指南进行操作,则可能是框架本身的失败。 atos 应该可以帮助您发现代码中确切的方法调用。
免责声明:我为 BugSense-iOS.framework 编写了代码。
BugSense works by getting the symbols on the device and posting them on the server, in a format similar to what you see in a crash log. BugSense gets the exception stacktrace and when it can't find one, the crashed thread stacktrace. For a variety of reasons, this isn't always perfect.
The stacktrace that you posted is partially symbolicated. It looks like BugSense has a problem getting the symbols in your own code.
If you have followed the usage guide to the letter, it could be a failing of the framework itself. atos should help you discover the exact method calls in your code.
Disclaimer: I write the code for BugSense-iOS.framework.
如果您有免费的 BugSense 帐户,它不会为您符号化崩溃报告。不过,您可以每月支付 19 美元来启用此功能。或者你可以尝试使用我写的这个 python 脚本。
https://github.com/dr4ke616/Bugsense-Symbolicater
If you have a free BugSense account, it wont Symbolicate the crash reports for you. However you can pay $19/month to enable this feature. Alternatively you can try use this python script I wrote.
https://github.com/dr4ke616/Bugsense-Symbolicater
您还可以尝试使用 Crittercism 进行符号化。过去一个月我一直在使用它们,它们的符号系统非常准确。
You could also try symbolicating with Crittercism. I've been using them for the past month and their symbolification system has been spot on.
今天我自己不得不经历这个。我在 Ray Wenderlich 网站上找到了一个教程:
http ://www.raywenderlich.com/33669/overview-of-ios-crash-reporting-tools-part-1
我一直在以错误的方式使用Bugsense(没有符号和面包屑>.<)。
注意:面包屑适用于相当昂贵的版本。
如何将 dSYM 上传到 Bugsense 网站以符号化堆栈
跟踪 无论如何,从教程中,我发现我需要将 dSYM 文件夹作为压缩文件上传到 Bugsense。
该文件夹本质上允许原始堆栈跟踪来表示导致崩溃的函数调用,并显示行号。
当您进行归档时,您可以在“窗口”>“归档文件”中获取归档文件。组织者。
要获取 dSYM 文件,您需要:
右键单击存档 >在窗口中的 Finder 中显示 >组织者
屏幕。
然后右键单击该文件>显示打包内容,这将显示 dSYM 文件夹。
右键单击并压缩该文件夹。
登录到您的 bugsense 帐户,查找您的应用程序,转到设置页面,左侧应该有一个名为“dSYM”的选项卡。点击它,然后按浏览并选择上传按钮上传您的 dSYM。
现在,您可以转到每个错误并按“符号”按钮,这会将所有那些令人讨厌的:
崩溃消息变成类似这样的内容:
您需要为每次生成的相应存档上传相应的 dSYM 压缩文件您的应用程序的新捆绑版本。
否则,如果您尝试在没有此 dSYM 的情况下使用 Bugsense,您将得到无用的堆栈跟踪。
希望将来对任何人都有好处。祝你好运!
Just had to go through this myself today. I found a tutorial on the Ray Wenderlich site:
http://www.raywenderlich.com/33669/overview-of-ios-crash-reporting-tools-part-1
I had been using Bugsense the wrong way (without symbolicate and breadcrumb >.<).
Note: breadcrumb is for the rather expensive version.
How to upload dSYM to Bugsense website to symbolicate stacktrace
Anyhow, from the tutorial, I found out I needed to upload the dSYM folder as a zipped file to Bugsense.
This folder essentially allows the raw stacktrace to symbolicate with which function calls caused the crash, also showing line number.
When you do an archive, you get the archive file in Window > Organizer.
To get the dSYM file, you need to:
Right click the archive > Show In Finder from the Window > Organizer
screen.
Then right click the file > Show packaged contents, this will show you the dSYM folder.
Right click and zip that folder up.
Login to your bugsense account, look for your app, go to the settings page and there should be a tab on the left called "dSYM". Tap on that and then press the Browse & Upload button to upload your dSYM.
Now you can go to each of your bug and press the "symbolicate" button, this will turn all those nasty:
crash messages to something like:
You need to upload the respective dSYM zipped file for the respective archive that you generated everytime you generate a new bundle version of your app.
Otherwise, if you try to use Bugsense without this dSYM, you'll get a useless stacktrace.
Hope that benefits anyone in the future. Good luck!