为什么 iOS 上需要重启才能发送崩溃日志?

2024-03-03

使用自定义的崩溃报告系统(例如专门从事iPhone 崩溃后要求用户发送崩溃日志 https://stackoverflow.com/questions/5392283/ask-the-user-to-send-crash-log-after-crash-on-iphone)要发送日志,应用程序需要重新启动。为什么?是否可以在自定义异常处理期间发送它?或者是否有不需要重新启动应用程序的崩溃报告系统?


当发生崩溃时,应用程序处于高度不稳定的状态。因此,崩溃报告库无能为力,因为即使在崩溃时分配内存也可能会造成更大的损害。所以崩溃报告SDK只能使用所谓的异步安全 http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html收集所有崩溃数据的 C 方法。任何 Objective-C 代码都无法被处理,并且 iOS 网络堆栈也无法使用。

另请注意,异常只是 Objective-C 中应用程序崩溃的示例之一,还存在由低级 BSD 信号触发的崩溃。这两种类型都意味着应用程序处于高度不安全和不稳定的状态,并且在崩溃时应调用尽可能少的代码。

因此,这将需要重写大多数网络框架,以便能够在崩溃时发送数据,而这甚至可能无法以安全的方式完成。这就是为什么所有正确的崩溃报告 SDK 都不会执行类似的操作。

此外,在 iOS 上,不可能创建另一个可以在后台发送数据的进程,因此唯一安全且可能的解决方案是在应用程序下次启动时发送数据。

现在,这有另一个结论,即应用程序启动早期发生的崩溃可能永远不会被发送,因为应用程序在发送之前或同时崩溃。某些 SDK 提供了处理这种情况的机制,这很可能需要更改应用程序启动代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 iOS 上需要重启才能发送崩溃日志? 的相关文章

随机推荐