我们通常使用NSSetUncaughtExceptionHandler
或signal
来捕获Objective-C 崩溃,但我发现它无法捕获C 函数崩溃。那么我怎样才能捕捉到 C 函数崩溃呢?
最佳答案
拦截 Apple 平台上的崩溃事件并不简单。 signal
可用于捕获许多事件类型,但有些类型的终止在仅使用信号时会被遗漏。 mach 异常工具(不要与运行时异常混淆)可用于捕获更多类型的事件。从技术上讲,NSSetUncaughtExceptionHandler
不捕获崩溃,只捕获未捕获的 Objective-C 异常的详细信息。它不会捕获未捕获的 C++ 异常,即使在底层 ObjC 异常是构建在 C++ 之上的。
烦人的是,你真的不能只依赖一个系统。我发现 Apple 平台上的 POSIX 信号设施存在问题。但是,由于 mach 异常的工作方式存在一些限制,因此同时使用两者可以获得最大的覆盖范围。
现在,C 函数与 ObjC 方法并不特别或不同。如果您错过了一次崩溃,这可能是由于崩溃本身的性质,或者您如何检测您的过程。我需要查看有关两者的详细信息,以便为您提供更好的信息。如果可以,请使用更多详细信息更新您的问题。
您可能还对我从事的一个开源项目感兴趣,该项目专门设计为崩溃报告系统的核心。请随意查阅代码和/或尝试一下。 https://github.com/ChimeHQ/Impact
关于ios - 如何在 iOS 中获得 C 函数崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725164/