已发布应用程序上的 iPhone 崩溃捕获选项

标签 iphone crash try-catch

我想知道如何在生产应用程序中嵌入 CrashCatcher 框架 ( http://code.google.com/p/plcrashreporter )。我编写了一些代码,可以将崩溃报告直接上传到服务器。而且,我这样做的目的是更快地访问崩溃报告,而不需要通过 Apple/iTunes 来获取它们。

有谁知道嵌入CrashCatcher框架是否有可能通过申请审核流程?而且,如果确实如此,是否可能会导致任何问题或与 Apple 内置于 iTunes/iTunesConnect 中的崩溃捕获机制发生冲突?

想法?

最佳答案

我与 CrashReporter 的作者之一 Landon 进行了通信(谢谢!),以对此提供一些额外的说明。

显然,CrashReporter(信号)和 Apple 的崩溃捕获(Mach 异常)使用的机制是不同的并且相互兼容。

Do you understand the differences between how Apple is catching crashes vs CrashReporter? I have not looked closely at the CrashReporter source, but from what I read/remember it works by registering signal handlers? Is this accurate?

右 - PLCrashReporter 为其感兴趣的信号注册标准信号处理程序: 奥 git _a http://code.google.com/p/plcrashreporter/source/browse/trunk/Source/PLCrashSignalHandler.m#41

Do you know if Apple leveraging a different mechanism?

Apple 使用 Mach 异常处理程序在 Mac OS X 和 iPhone 上实现崩溃报告; mach 异常可以由异常服务器(进程内或进程外部)处理——内核提供的默认 UNIX 异常处理程序将 mach 异常映射到 UNIX 信号。

UNIX 异常处理程序在这里注册: http://code.google.com/p/plcrashreporter/source/browse/trunk/Source/PLCrashSignalHandler.m#223

对于崩溃报告,Mach 异常 API 的优点是您可以简单地将未修改的异常直接传递到下一个处理程序。我很早就研究过实现这一点,但必要的 API 是私有(private)的 [1],因此决定注册标准 UNIX 信号处理程序。如果您想了解有关 Mach 异常系统的更多信息,我建议您从 Mac OS X 内部结构的第 9 章第 7 节开始。

干杯, 兰登

[1] Unity 3d 最近通过 exc_server() 运行了 mach 异常私有(private) API 问题: http://fxr.watson.org/fxr/source/bsd/kern/bsd_init.c?v=xnu-1456.1.26#L999

关于已发布应用程序上的 iPhone 崩溃捕获选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845630/

相关文章:

windows - Powershell启动记录错误

c++ - 如何抛出 std::invalid_argument 错误?

iphone - 从 iOS 设备连续录制和发送/流式传输声音到服务器

iphone - cancelPreviousPerformRequestWithTarget 不会取消我之前使用 PerformSelector 启动的延迟线程

iphone - 如何在 iOS 6 中获取 Facebook 好友?

ios - 将 CMSampleBufferRef 处理到数组会导致崩溃

java - 无法使用加载的字体

iOS被拒绝5次

r - Linux 服务器在 R 并行中崩溃 - 反序列化错误(节点 $con): error reading from connection

android - 为什么 onServiceDisconnected 在应用程序崩溃时不会被调用?