将自定义数据包含到 iOS 故障转储中

Posted

技术标签:

【中文标题】将自定义数据包含到 iOS 故障转储中【英文标题】:Including custom data into iOS crash dumps 【发布时间】:2012-01-19 07:22:47 【问题描述】:

你好堆栈溢出!

问你一个简单的问题:当我的应用在他们的设备上崩溃时,是否可以将自定义错误数据嵌入到我从用户那里获得的自动生成的 ios 崩溃转储中?

例如:我的 SQlite 数据库由于某种原因无法运行(例如,数据库文件已损坏).. 我无法从这个错误中恢复,所以我抛出一个异常,并在异常中嵌入详细的 sqlite 错误消息.问题是,应用程序的崩溃转储中不会包含异常消息,因此很难知道应用程序在什么情况下崩溃了。

有没有人知道将事情放入故障转储报告的方法?或者您是否有任何其他推荐的方式向开发人员报告生产崩溃?

谢谢!

【问题讨论】:

【参考方案1】:

不,您不能将自己的数据添加到崩溃报告中。由于沙箱,也无法自动访问 iOS 生成的崩溃报告。

所以我的建议如下:

    要记录您自己的数据,请使用Cocoalumberjack。它比 NSLog 或其他日志框架快得多,并且可以选择将消息记录到文件中。现在,当发生异常时,或者在您需要时,将其记录到文件中。但是,如果您的应用在您将某些内容添加到日志文件时发生崩溃,那么它很可能会丢失,因为应用在同一时刻崩溃了。

    因此,安全地捕获确切的 SQL 语句是相当不可能的。但是崩溃报告应该为您提供足够的信息来了解正在发生的事情,以及您之前记录的内容。例如。您可以在执行 SQL 之前记录以 SQL 方式使用的搜索字符串。

    一般尽量不要记录太多。

    要捕获崩溃报告,您应该使用基于开源框架PLCrashReporter 的解决方案,它可以safely 捕获崩溃,即使您的应用程序已经在应用商店中!不建议捕获异常,请查看this article 了解原因!

    iTunes Connect 也可以让您查看一些崩溃报告,但最多需要 2 周才能看到一些,但目前还不是全部,例如由Camera+ developers 指出。所以你最好使用自己的解决方案。

    PLCrashReporter 将向您发送标准 Apple 格式的崩溃报告,准备好进行符号化,以便您了解代码中发生崩溃的位置,包括行号。

    一些基于PLCrashReporter的解决方案有:

    QuincyKit: 开源客户端 + php 服务器,基本崩溃分组,符号化可以从你的 mac 自动化(我是这个的开发者) HockeyApp:付费服务,使用 QuincyKit 客户端,高级崩溃分组,符号化完全在服务器上完成(我是这个开发者之一) Bugsense:免费服务,象征性宣布为高级功能 AppBlade:付费服务,符号未知 Crashlytics:内测,未知功能,他们的解决方案似乎是基于PLCrashReporter的

    建议的解决方案要么允许在下次启动时自动发送数据,要么询问用户是否同意发送。

【讨论】:

小修正:BugSense 目前在设备上提供符号化。 谢谢尼克。从今天开始我猜这是新的:)所以这意味着没有行号并且您需要应用程序二进制文件中的符号? 完全正确 :) 当我在 BugSense 接手 iOS 开发时,符号化变得可用,所以它已经存在了一段时间。它不能完美运行,并且缺少行号和文件信息。我最近发现即使打开了一些“剥离”选项,有些构建也具有象征意义,我试图弄清楚为什么会这样...... 据我所知,它们在服务器上提供了显示行号的符号,而不需要符号成为应用程序的一部分。但据我所知(通过查看 *** 中发布的报告),它们仅在主线程崩溃时显示主线程,并且不提供 Last Exception Backtraces,这很重要,因为异常会被重新抛出到下一个运行循环中然后堆栈跟踪不是崩溃实际发生的地方。请注意,我是竞争对手产品 HockeyApp 的成员,最近没有详细查看它。你需要检查一下。 很好的答案,您说“所以您知道代码中发生崩溃的位置,包括行号”。你如何获得行号,我从未在我的任何堆栈跟踪中看到行号或类名?【参考方案2】:

Disclaimer-as-per-the-faq:我是 AppBlade 的开发人员。

AppBlade 允许您发送自定义参数以及截至 2012 年 12 月的符号化崩溃报告。

看看吧! http://blog.appblade.com/news/2012/12/appblade-sdk-update-sessions-and-queues/

【讨论】:

以上是关于将自定义数据包含到 iOS 故障转储中的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将自定义数据发送到 Mailchimp 的 API,以便将其包含在活动中?

使用 udf 传递列作为参数将自定义列添加到 pyspark 数据帧

如何将自定义适配器添加到活动中以使列表出现在活动中?

将自定义文本输入到v-select中

php 将自定义数据发送到 php web 服务器并保存到文件

如何将自定义请求主体绑定到twilio