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

时间:2013-03-20 10:53:26

标签: 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

我希望得到相同的报告

3 个答案:

答案 0 :(得分: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的基于客户端SDK和PHP的服务器组件。使PLCrashReporter易于集成,服务器组件收集报告并在符号化后对其进行分组。可以使用您自己的Mac自动进行符号化以进行实际符号化。 (免责声明:我是开发者)

托管/商业解决方案:

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

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

答案 1 :(得分:1)

在Xcode目标中,

  

将'Debug information Formate'设置为DWARF。

     

生成调试符号:是

     

复制期间剥离调试符号:是

有关详情,请参阅图片。在最终上传中,请确保您恢复相同。这是为了测试。 enter image description here

答案 2 :(得分:1)

为此,您需要有一个在创建分发版本时生成的dSYM文件。

以下链接可以为您提供一些帮助..

Symbolicating iPhone App Crash Reports