【问题标题】:How to sybolicate iOS crash reports from BugSense?如何从 BugSense 中提取 iOS 崩溃报告?
【发布时间】:2011-12-02 06:48:45
【问题描述】:

我开始通过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 下载“常规”崩溃报告并使用它,或者他们提供的数据是否足以以某种方式处理?我知道报告来自哪个版本的应用程序,所以我知道要针对哪些二进制文件进行符号化。

【问题讨论】:

  • Symbolicating iPhone APP Crash Reports 看看他们的 atos 解决方案也是一次性的。
  • 感谢您的建议。我尝试使用atos,但收到以下错误消息:“atos cannot load symbols for the file MyApp.app.dSYM for architecture armv7”
  • 所以在我的情况下,我在 finder 中显示了我的应用存档,然后导航到终端中的 .xarchive 文件。然后我进入 Products/Applications 目录并输入 atos -arch armv7 -o MyApp.app/MyApp 现在这将使您进入交互模式,然后您只需输入地址 0x738167
  • 您使用什么版本的 Xcode/iOS 进行开发?

标签: ios xcode debugging crash symbols


【解决方案1】:

BugSense 的工作原理是获取设备上的符号并将它们发布到服务器上,其格式类似于您在崩溃日志中看到的格式。 BugSense 获取异常堆栈跟踪,当它找不到时,崩溃的线程堆栈跟踪。由于各种原因,这并不总是完美的。

您发布的堆栈跟踪是部分符号化的。看起来 BugSense 在获取您自己的代码中的符号时遇到了问题。

如果您完全按照使用指南进行操作,则可能是框架本身的故障。 atos 应该可以帮助您发现代码中的确切方法调用。

免责声明:我为 BugSense-iOS.framework 编写代码。

【讨论】:

    【解决方案2】:

    如果您有免费的 BugSense 帐户,它不会为您符号化崩溃报告。但是,您可以每月支付 19 美元来启用此功能。或者,您可以尝试使用我编写的这个 python 脚本。

    https://github.com/dr4ke616/Bugsense-Symbolicater

    【讨论】:

      【解决方案3】:

      您也可以尝试使用Crittercism 进行符号化。过去一个月我一直在使用它们,并且它们的符号系统已经到位。

      【讨论】:

        【解决方案4】:

        今天我只好自己经历了。我在 Ray Wenderlich 网站上找到了一个教程:

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

        我一直在错误地使用 Bugsense(没有符号和面包屑>.

        注意:面包屑适用于相当昂贵的版本。

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

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

        这个文件夹本质上允许原始堆栈跟踪以符号化导致崩溃的函数调用,还显示行号。

        当您进行存档时,您会在 Window > Organizer 中获得存档文件。

        要获取 dSYM 文件,您需要:

        1. 右键单击存档 > 从窗口显示在 Finder > 管理器 屏幕。

        2. 然后右键单击文件>显示打包内容,这将显示dSYM文件夹。

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

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

        现在您可以转到每个错误并按“符号化”按钮,这将使所有这些讨厌:

        0000x1aeaf390a 
        

        崩溃消息类似于:

        MyViewController:m110, [MyViewController objectAtIndex:17] out of bounds
        

        您需要为每次生成应用的新捆绑版本时生成的相应存档上传相应的 dSYM 压缩文件。

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

        希望这对未来的任何人都有好处。祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多