我有一个可在模拟器上正常运行的滚动 View 应用程序,但是,当我将其安装在设备上时,当我尝试滚动一页时,它会给我EXC_BAD_ACCESS。我已经通过带有分配和泄漏的工具运行了它,但是什么都没有泄漏,也没有任何僵尸消息……我只是很好奇什么会在模拟器与设备之间造成如此大的差异?由于我的符号化的崩溃日志(下面有部分内容)没有任何调试的方法,因此似乎没有什么符号化。

异常类型:EXC_BAD_ACCESS(SIGBUS)
异常代码:0x0000000f处的KERN_PROTECTION_FAILURE
损坏的线程:0

线程0崩溃:
0 libobjc.A.dylib 0x0000286e objc_msg发送+ 18
1 MyApp的0x00004fee 0x1000 + 16366
2 UIKit的0x000668f4-[UIViewController View ] + 104
3 MyApp的0x00009716 0x1000 + 34582
4 MyApp的0x0000960c 0x1000 + 34316
5 UIKit的0x0001426c-[UIScrollView setContentOffset:] + 344

谢谢

最佳答案

您在模拟器中的代码可能存在该错误,但是并没有因为您取消引用的指针不在未映射的内存中而幸运地触发了EXC_BAD_ACCESS。指针可能是坏的,可以访问,但未被检测到-仍然是一个错误。

您已经检查过没有收到僵尸消息,这是我的第一个建议。

接下来要做的是启用Guard Malloc-然后阅读此内容

http://developer.apple.com/iphone/library/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html

您只能在模拟器中执行此操作-您的目标是使用超敏感堆使错误在模拟器中抛出EXC_BAD_ACCESS。

在文章中:

  • 查看如何在GDB中设置变量
  • 阅读“检测堆损坏”部分
  • 10-06 13:10