当前位置:  开发笔记 > 前端 > 正文

KERN_INVALID_ADDRESS和KERN_PROTECTION_FAILURE之间有什么区别?

如何解决《KERN_INVALID_ADDRESS和KERN_PROTECTION_FAILURE之间有什么区别?》经验,为你挑选了1个好方法。

iPhone OS KERN_INVALID_ADDRESSKERN_PROTECTION_FAILUREiPhone OS 之间的区别是什么?

我有一个来自ad-hoc beta测试者的两个崩溃报告,相隔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:"方法.



1> Jared Oberha..:

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

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS表示您正在参考的虚拟地址不在页面表中,或者您没有访问权限.这是一个您不允许访问的虚拟地址.对于您的示例地址地址0x67696c69,很可能这不是指针被视为指针; 或者包含指针的数据结构是免费的,并用其他数据覆盖.

对于您的KERN_INVALID_ADDRESS示例,指针数据拼出ASCII'ilig'(因为它是小端).因此,存储指针的内存可能会被某种字符串覆盖.

在这两种情况下,都可能会覆盖您的数据结构UIWindow.


"...你正在访问一个从开头偏移8个字节的结构元素,但你的结构指针是'NULL`."一种方法是将`nil`分配给`self`,然后尝试访问一个实例变量.这在`init`方法中是最有可能的,因为这是你可能分配给`self`的唯一地方.
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有