在iPhone上获取上一次运行、崩溃日志

在iPhone上获取上一次运行、崩溃日志,iphone,xcode,crash,logging,Iphone,Xcode,Crash,Logging,我试图编写一个崩溃报告功能,当你在崩溃后启动应用程序时,它将提供向服务器发送崩溃报告的功能。我找不到如何在应用程序中获取崩溃日志。我看到有一个这样做的框架(),但是这个框架很大,我不需要它的大部分特性 有人知道如何简单地访问日志吗 谢谢, 伙计。我也有类似的问题,PLCrashReported看起来太复杂了,不适合我想做的事情。 请注意,您无法访问Apple生成的崩溃报告,PLCrashReport会生成自己的报告并将其存储在用户的缓存文件夹中 最后,我使用了以下示例: 它非常简单易用,只需使

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

有人知道如何简单地访问日志吗

谢谢,
伙计。

我也有类似的问题,PLCrashReported看起来太复杂了,不适合我想做的事情。 请注意,您无法访问Apple生成的崩溃报告,PLCrashReport会生成自己的报告并将其存储在用户的缓存文件夹中

最后,我使用了以下示例:

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

NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);

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

我想我没有必要对Nimrod Gat的答案添加注释,所以我必须在这里提供后续信息。我会尽力让它值得一个独立的答案

编写一个安全、正确、可靠的崩溃报告程序是非常非常困难的,尤其是直接在进程中运行的崩溃报告程序。尼姆罗德·盖特的回答中引用的代码是不正确的,老实说,这篇博文应该收回。信号处理程序只能运行异步安全代码,而该代码不是异步安全的:

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

人们很容易认为,你可以拼凑出一个更简单的解决方案,而且在某些时候它会起作用,但像谷歌工程师这样的人有一个很好的理由,他们有数千个LoC专门用于可靠的崩溃报告:


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

也许更好的解决方案是使用完全专用的端2端解决方案/服务?比如。它目前处于封闭测试阶段,但您可以要求参与,我们会很快回复您。您需要做的唯一一件事是注册API密钥,并将一个小框架库嵌入到您的应用程序中(或android中的.jar文件)。然后,您不仅可以远程访问crashlogs,还可以远程访问应用程序生成的调试日志,这使它更加有用。目前,它的目标是在测试期间使用,但很快就会有一个lite版本,您可以将其嵌入app store发布的应用程序中

在这个框架内,我们正在做所有的魔术,插入苹果的框架,获取crashlog信息,解码堆栈跟踪,甚至处理内存不足的情况。@nupark的所有评论都非常正确:我们花了无数的时间让它无缝工作——线程安全,确保我们能够在苹果框架要求的时间内保存所有内容,直到你的应用程序最终被杀死,从内存不足的情况下获取堆栈跟踪(这真的很困难)。android也是一样——我们在那里做了一些聪明的小动作,以确保它真的工作正常

免责声明:我是Polidea公司的首席技术官,该公司是apphance的幕后推手和解决方案的共同创造者。

您可能很高兴知道许多(SAAS)E2E解决方案

集成到应用程序中非常简单

玩得开心

  • (免费,我的首选)
  • 在我们的时代,您可以使用内置的崩溃报告(iOS和Android)


  • PLCrashReporter在崩溃时退出之前生成崩溃日志。我不认为你能得到苹果为他们的使用而生成的日志。所以你们要么使用PLCrashReporter,要么自己动手:处理信号,写一些你们认为可能有助于你们的文件,让用户在下次启动时发送。然而,这项任务(例如,正确处理信号)相当棘手,因此我建议使用PLCrashReporter(或者至少先研究它的代码)。PLCrashReporter框架只有1.2MB。那一点也不大。事实上,我刚刚发布了我的iPad应用程序的一个更新,其中包含了这个应用程序的一个修改版本。虽然回溯在某种程度上“有效”,但它不是异步安全的,并且在许多情况下会死锁。您不应该依赖它生成碰撞报告。