获取以前的运行,在iPhone上崩溃日志

Guy*_*aim 4 iphone crash xcode logging

我试图写一个崩溃报告功能,当你在崩溃后启动应用程序时,它会提供将崩溃报告发送到服务器.我找不到如何在应用程序中获取崩溃日志.我看到有一个框架这样做(PLCrashReporter),但是这个框架很大,我不需要它的大部分功能.

有谁知道如何简单地访问日志?

谢了,兄弟们.

小智 14

我想我没有业力为Nimrod Gat的答案添加评论,所以我必须在这里提供我的跟进.我会尝试让它值得一个独立的答案.

编写安全,正确且可靠的崩溃报告器非常非常困难,尤其是直接在进程中运行的报告.Nimrod Gat的答案中引用的代码不正确,老实说,该博客文章应该被收回.信号处理程序必须只运行异步安全代码,并且该代码不是异步安全的:

http://www.cocoadev.com/index.pl?SignalSafety

崩溃处理比正常的信号处理更复杂,因为您不能指望在信号处理程序返回后进程继续成功运行.

很有可能认为你可以将一个更简单的解决方案混合在一起,并且它会在某些时候起作用,但是有一个很好的理由让人们喜欢Google的工程师有数千个LoC致力于可靠的崩溃报告:

http://code.google.com/p/google-breakpad/

在iOS上,您应该只使用PLCrashReporter.在其他平台(例如Mac OS X)上,您应该使用Google Breakpad.重新发明这个轮子是没有意义的,除非你不仅要正确地做,而且要比已经存在的要好.


小智 5

我遇到了类似的问题,PLCrashReported似乎对我想做的事情太复杂了.请注意,您无法访问Apple生成的崩溃报告,PLCrashReport会生成自己的报告并将其存储在用户的缓存文件夹中.

最后,我使用了以下示例:http: //cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

它非常简单易用,只需使用以下命令注册异常和信号处理程序:

NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);
Run Code Online (Sandbox Code Playgroud)

并使用类中的backtrace方法获取堆栈跟踪UncaughtExceptionHandler.