异常代码:0x00000000错误时KERN_PROTECTION_FAILURE

时间:2010-08-27 05:29:25

标签: iphone debugging macos crash

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000

什么是内核保护错误?
我在哪里可以清楚地找到有关异常类型和代码的详细信息?

2 个答案:

答案 0 :(得分:3)

操作系统不允许用户应用访问(读取或写入)某些内存地址。地址0(NULL或nil指针指向的地址)是这些地址之一。一个非常常见的原因是代码使用了一个从未被初始化的指针。

答案 1 :(得分:3)

您可以在/usr/include/mach/exception_types.h中查看Mach内核异常的完整列表。大多数(如果不是全部)可以归结为“你的程序做错了”。

正如hotpaw2已经告诉过你的那样,你在这种情况下做错的具体事情是取消引用NULL。您可能已经在您自己的代码中直接执行了此操作,或者通过将NULL传递给某个库函数或框架方法来间接完成此操作。例如,将NULL作为指针参数之一传递给memcpy是导致此崩溃的好方法。

请注意,向nil发送Objective-C消息是正常的 - 它什么都不做并返回0.另一方面,在消息中传递nil作为参数可能不正常。将nil传递到不需要的位置可能会导致抛出NSException(这将导致SIGTRAP,而不是SIGBUS信号),或者可能导致某些代码最终解除引用{ {1}}。或者它可能是完全无害的。但除非文档明确说明没有问题,否则你不应该这样做,因为否则,即使它现在有效,也可能会在以后破坏。