Iphone 什么';内核无效地址和内核保护失败之间的区别是什么?

Iphone 什么';内核无效地址和内核保护失败之间的区别是什么?,iphone,Iphone,iPhone操作系统上的KERN\u无效\u地址和KERN\u保护\u故障有什么区别 我有两份来自临时测试人员的崩溃报告,相隔5分钟,它们之间的主要区别(除了“二进制图像:”部分)是这一部分: 报告A: Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008 报告B: Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exce

iPhone操作系统上的
KERN\u无效\u地址
KERN\u保护\u故障
有什么区别

我有两份来自临时测试人员的崩溃报告,相隔5分钟,它们之间的主要区别(除了“二进制图像:”部分)是这一部分:

报告A:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008
报告B:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x67696c69
值得一提的是,两者都有这样的痕迹:

Thread 0 Crashed:
0   libobjc.A.dylib                 0x30011940 objc_msgSend + 20
1   UIKit                           0x30940174 -[UIWindow _shouldAutorotateToInterfaceOrientation:] + 60
2   UIKit                           0x30a223d8 -[UIWindow _updateToInterfaceOrientation:duration:force:] + 36
3   UIKit                           0x30958638 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation] + 112
4   UIKit                           0x30942514 -[UIWindow _handleDeviceOrientationChange:] + 72
5   Foundation                      0x3054dc7a _nsnote_callback + 178
6   CoreFoundation                  0x3024ea52 _CFXNotificationPostNotification + 298
7   Foundation                      0x3054b854 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
8   UIKit                           0x309414a4 -[UIDevice setOrientation:] + 124
9   UIKit                           0x30938330 -[UIApplication handleEvent:withNewEvent:] + 5232
10  UIKit                           0x30936ce8 -[UIApplication sendEvent:] + 60
11  UIKit                           0x30936874 _UIApplicationHandleEvent + 4336
12  GraphicsServices                0x32046964 PurpleEventCallback + 1028
13  CoreFoundation                  0x30254a70 CFRunLoopRunSpecific + 2296
14  CoreFoundation                  0x30254164 CFRunLoopRunInMode + 44
15  GraphicsServices                0x3204529c GSEventRunModal + 188
16  UIKit                           0x308f0374 -[UIApplication _run] + 552
17  UIKit                           0x308eea8c UIApplicationMain + 960
18  MyApp                           0x00015e24 0x1000 + 85540
19  MyApp                           0x0000f138 0x1000 + 57656
此外,我在代码中的任何地方都没有实现“shouldAutorotateToInterfaceOrientation:”方法。

EXC\u BAD\u ACCESS(SIGBUS)KERN\u PROTECTION\u FAILURE
意味着虚拟地址显然是错误的:大多数CPU必须访问特定字节边界上的内存。因为这里的数据访问是针对64位值(8)进行对齐的,所以它必须尝试执行获取128位值的指令(例如比较和交换指令
CMPXCHG16B
)。在任何情况下,您都可以从这里的示例中看到它是
0x00000008
,这可能意味着您正在访问一个从开始偏移8字节的结构元素,但您的结构指针是
NULL

EXC_BAD_ACCESS(SIGSEGV)KERN_INVALID_ADDRESS
表示您引用的虚拟地址不在页表中,或者您没有访问权限。这是一个不允许你访问的虚拟地址。对于您的示例地址address
0x67696c69
,很可能这不是一个被当作指针的指针;或者包含指针的数据结构被释放并被其他数据覆盖

对于
KERN\u INVALID\u ADDRESS
示例,指针数据拼写出ASCII“ilig”(因为它是小尾端)。因此,存储指针的内存可能会被某种字符串覆盖


在这两种情况下,都有可能是您的
ui窗口中的数据结构被重写了

谢谢,贾里德。这很有帮助。“…您正在访问一个从开始偏移8字节的结构元素,但您的结构指针是
NULL
”,一种方法是将
nil
赋值给
self
,然后尝试访问一个实例变量。这在
init
方法中最有可能,因为这是您可能分配给
self
@PeterHosey的唯一位置-什么是结构指针?分配nil将如何解决问题..你能解释一下吗?@DuraiAmuthan.H结构指针是指向结构的指针。为self指定nil并不能解决问题;这是创建它的一种方法:对象是一种结构,因此对象指针是结构指针,self是对象指针,实例变量是对象结构的成员,因此,将nil赋值给self意味着对self的一个ivar的任何访问都是一个空的解引用。@Jared-谢谢。这很有帮助。您是否找到了导致此特定问题的原因?我正在尝试调试一个崩溃,其回溯与此几乎相同,您的解决方案可能会为我指明正确的方向。Nathan,我不是100%确定这是解决此问题的方法,但我过早地发布了从Interface Builder实例化的UIViewController。我还做了其他一些更改,包括重写代码,在通过MPMoviePlayerController播放电影之前,将界面动画化。自从这批修复之后,我的测试人员就没有报告过这个问题。祝你好运这个可能很难找到。好的,谢谢你的提醒,大卫。我还没有解决这个问题,但我找到了两个你可能感兴趣的资源:@davidcann-你是如何解决这个问题的?