ios - 如何在 iOS 中获得 C 函数崩溃?

标签 ios c objective-c crash

我们通常使用NSSetUncaughtExceptionHandlersignal 来捕获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/

相关文章:

objective-c - 如果可重用单元在 UITableView 中是唯一的,那么这些单元出队真的有必要吗?

iphone - 在普通类使用SKProduct

推送转换后 iOS 按钮未完全呈现

C++ 类成员函数到 C 结构函数指针

objective-c - 带有 kCCHmacAlgSHA1 的 CCHmac 输出长度不一致

iphone - 使用 objective-c 保存用户名和密码

ios - Google Maps IOS SDK - 刷新 MapView。 ( objective-c )

ios - 如何显示 UIWebView 的滚动指示器

c - Emacs 中的 Linux 内核标记

c - 在 C 中,当没有任何内容可读时,读取函数 "know"是如何实现的?