如何使用Apple提供的崩溃报告等代码生成崩溃报告

我想为Symbolicate iOS崩溃生成崩溃报告来查看崩溃日志,所以我想使用代码得到崩溃报告,目前我只得到:

* – [__ NSArrayM objectAtIndex:]:索引121超越范围[0 .. 23]

Application received signal SIGSEGV ( 0 CoreFoundation 0x3120e2bb + 186 1 libobjc.A.dylib 0x38f2b97f objc_exception_throw + 30 2 CoreFoundation 0x3120e1c5 + 0 3 myshine 0x001f9f51 myshine + 1503057 4 libsystem_c.dylib 0x393a9e8b _sigtramp + 34 5 myshine 0x000ac985 myshine + 137605 6 myshine 0x000ac35d myshine + 136029 7 CoreFoundation 0x311ab7cf + 74 ) not have / 1: Process Information Incident Identifier: 30E46451-53FD-4965-896A-457FC11AD05F CrashReporter Key: 5a56599d836c4f867f6eec76afee451bf9ae5f31 Hardware Model: iPhone4,1 Process: Rage Masters [4155] Path: /var/mobile/Applications/A5635B22-F5EF-4CEB-94B6-FE158D885014/Rage Masters.app/Rage Masters Identifier: Rage Masters Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] / / 2: Basic Information Date/Time: 2012-10-17 21:39:06.967 -0400 OS Version: iOS 6.0 (10A403) Report Version: 104 // 3: Exception Exception Type: 00000020 Exception Codes: 0x000000008badf00d Highlighted Thread: 0 

我想得到相同的报告

所以你想写自己的碰撞记者,这样你就可以得到报告,并象征着他们?

编写崩溃报告非常困难,请参阅开源库PLCrashReporter的开发人员的这两篇文章,以了解涉及的内容: http : //landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html和http ://landonf.bikemonkey.org/code/crashreporting/Reliable_Crash_Reporting_1.1.20130119.html

简而言之:

  • 所有的代码必须是asynchronous安全的。 这意味着你不能使用任何Objective-C的代码。 大多数C方法也不是asynchronous安全的。
  • 一旦发生崩溃,您可以(基本上)不分配新的内存。

所有你提到的细节和那些还没有被要求写这样一个记者的细节,都需要写出比答案更适合的方式。

只是不要自己写,并保护自己一些麻烦。 那里有很多可以使用的解决scheme。 有些是开源的,如果它们对上述规则是安全的,有些是封闭源代码,并且不能被轻易validation,那么可以进行validation(上面的文章对其中的一些细节进行了细化)。

我不会就各种解决scheme提出任何build议,因为我是一个开放源代码和一个商业解决scheme的开发者,所以我有偏见。 上面链接的文章分析了一些可用的解决scheme。

所以这里有一些。

开源:

  • PLCrashReporter :自2009年起在成千上万的应用程序中使用。安全可靠地创build标准格式的崩溃报告,可以用符号表示。
  • KSCrash :很新。 创build标准格式的崩溃报告。 可以连接不同的服务器解决scheme
  • QuincyKit :基于PLCrashReporter的客户端SDK和基于PHP的服务器组件。 使PLCrashReporter易于集成,服务器组件收集报告并将它们一旦符号化就进行分组。 象征可以使用自己的Mac来自动执行实际的符号。 (免责声明:我是这个的开发者)

托pipe/商业解决scheme:

  • Bugsense :免费和付费计划。 引擎盖下使用PLCrashReporter。 其余的SDK似乎是封闭的来源。 服务器端的象征。
  • BugSnag :免费和付费的计划。 开源SDK。
  • Crashlytics :免费。 封闭的来源。 下面使用了PLCrashReporter,现在使用自己的实现。 服务器端的象征。
  • Crittercism :免费和付费计划。 引擎盖下使用PLCrashReporter。 其余的SDK似乎是封闭的来源。 服务器端的象征。
  • HockeyApp :付费计划,1个月试用。 使用PLCrashReporter,所有的SDK都是开源的。 创build标准格式的崩溃报告。 服务器端的象征。 (免责声明:我是这个的联合创始人和开发者之一)
  • 哨兵 :付费,很新,开源(SDK和服务器)。
  • Testflight :免费,封闭的源代码。 服务器端的象征。

那里肯定还有一些我忘记的东西。

为此,您需要在创build分发版本时生成一个dYSM文件。

下面的链接可以对你有所帮助。

符号化的iPhone应用程序崩溃报告

在Xcode目标中,

将'debugging信息Formate'设置为DWARF。

生成debugging符号:是的

在复制期间去除debugging符号:是

查看图片了解更多信息。 在最后上传确保你恢复相同。 这是为了testing。 在这里输入图像说明