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

pen*_*ang 0 iphone ios

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

* - [__ 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
Run Code Online (Sandbox Code Playgroud)

我想得到同样的报告

Ker*_*rni 9

所以你想写自己的崩溃记者,这样你就可以得到报告并对它们进行符号化?

写崩溃报告是非常非常难,看从开放源码库的开发者这两篇文章PLCrashReporter进行了解什么是参与:http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.htmlHTTP ://landonf.bikemonkey.org/code/crashreporting/Reliable_Crash_Reporting_1.1.20130119.html

简而言之:

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

你要问的所有细节和尚未被要求写这样一个记者的细节都要求写出比答案更合适的方式.

只是不要自己写,并安全自己一些麻烦.那里有很多现成的解决方案.有些是开源的,如果它们对上述规则是安全的,可以进行验证,有些是封闭源,不能轻易验证(上面的文章详细介绍了其中一些规则).

我不会对各种解决方案提出任何建议,因为我有偏见,因为我是一个开源和一个商业解决方案的开发人员.上面链接的文章确实分析了一些可用的解决方案.

所以这里有一些.

开源:

  • PLCrashReporter:自2009年以来在数千个应用程序中使用.安全,可靠,创建可以象征化的标准格式崩溃报告.
  • KSCrash:很新.创建标准格式崩溃报告.可以连接到不同的服务器解决方
  • QuincyKit:基于PLCrashReporter的 Client SDK和基于PHP的服务器组件.使PLCrashReporter易于集成,服务器组件收集报告并在符号化后对其进行分组.可以使用您自己的Mac自动进行符号化以进行实际符号化.(免责声明:我是这个的开发者)

托管/商业解决方案:

  • Bugsense:免费和付费计划.在引擎盖下使用PLCrashReporter.SDK的其余部分似乎是封闭源代码.服务器端符号化.
  • BugSnag:免费和付费计划.开源SDK.在引擎盖下使用KSCrash.
  • Crashlytics:免费.封闭源.在引擎盖下使用了PLCrashReporter,现在使用自己的实现.服务器端符号化.
  • Crittercism:免费和付费计划.在引擎盖下使用PLCrashReporter.SDK的其余部分似乎是封闭源代码.服务器端符号化.
  • HockeyApp:付费计划,1个月试用.使用PLCrashReporter,所有SDK都是开源的.创建标准格式崩溃报告.服务器端符号化.(免责声明:我是其中的联合创始人和开发者之一)
  • Sentry:付费,全新,开源(SDK和服务器).在引擎盖下使用KSCrash.
  • Testflight:免费,封闭的来源.服务器端符号化.

肯定还有一些我忘了的东西.