2013-03-20 186 views
0

我想为Symbolicate iOS Crash生成崩溃报告以查看崩溃日志,因此我想要使用代码获取崩溃报告,目前我只能得到:如何使用Apple提供的崩溃报告等代码生成崩溃报告

* - [__ 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 

我想获得相同的报告

回答

7

所以,你要编写自己的崩溃报告,以便您可以得到的报告,并symbolicate呢?

写入崩溃报告是非常非常辛苦,看到从开源库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代码NOT。大多数C方法也不是异步安全的。
  • 发生崩溃后,您可以(基本上)不分配新的内存。

你所问的所有细节以及那些还没有被要求写这样一个记者的细节都需要写出比可以适合答案更多的方法。

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

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

所以这里有一些。

开源:

  • PLCrashReporter:在成千上万的应用程序,因为2009年的安全使用,可靠,创建一个可以symbolicated标准格式的崩溃报告。
  • KSCrash:很新。创建标准格式的崩溃报告。可以连接不同的服务器解决方案
  • QuincyKit:基于PLCrashReporter的基于客户端SDK和PHP的服务器组件。易于集成PLCrashReporter和服务器组件收集报告并将它们分组后,一旦它们被符号化。符号化可以使用您自己的Mac自动执行实际符号。 (免责声明:我是这样做的开发商)

托管/商业解决方案:

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

肯定还有一些我在那里忘记了。

+0

嗨,有没有解决方案发送崩溃报告到我自己的服务器? – 2014-05-08 01:50:58

+0

@HaiHw PLCrashReporter和KScrash用于此目的 – 2015-05-28 20:25:30

+0

'http:// testflight.com'重定向到'http:// www.pearsoned.com /' – usandfriends 2016-02-11 23:12:38

1

在Xcode目标,

将'调试信息Formate'设置为DWARF。

生成调试符号:是

地带调试符号复制过程中:是

查看图像的更多信息。在最终上传时请确保你恢复相同。这是为了测试。 enter image description here

+0

感谢您的回答,但我想从用户那里得到崩溃,所以我需要使用代码 – pengwang 2013-03-20 11:46:42

+0

崩溃用户是指应用商店用户还是您的测试用户?如果它来自测试用户,那么你可以使用http://www.crashlytics.com或https://testflightapp.com – Guru 2013-03-20 11:50:19

+0

应用商店用户 – pengwang 2013-03-20 11:51:46