在 iPhone 上追踪越界访问

Track down out-of-bounds access on iPhone

本文关键字:越界 访问 追踪 iPhone      更新时间:2023-10-16

我平均工作(~20k行代码,Objective-C与C++混合),我正在寻找一个EXC_BAD_ACCESS错误。

我已经尝试了所有常用技术(例如启用NSZombie,防护边缘等)到目前为止,我已经排除了访问已发布对象的可能性,以及双重释放错误。

似乎有些东西写在不应该写的内存空间上。但是,与许多内存错误一样,它不会一直发生,也不会总是在同一个地方崩溃。(有时我会收到"对象在释放后被修改"消息)。

有时,被覆盖的内存属于分配器,它会在 malloc 或 free() 上崩溃。

而且,当然,应用程序中的某些更改可能会影响错误的行为 - 如果我尝试注释掉部分代码,错误出现的频率会降低,因此更难找到它。

最后,我一直在研究使用 valgrind,但似乎所有使用它的人都在模拟器上工作。 但我的代码必须在实际设备上运行(某些代码特定于 ARM

是否有关于如何调试此类错误的一般提示?

注意:该应用程序涉及视频处理,因此使用的内存量相当大。

XCode 上有一些特殊的工具。您可以尝试使用它们来分析您的代码。http://developer.apple.com/library/mac/#featuredarticles/StaticAnalysis/index.html在使用无效对象的情况下,它将产生一些警告,因此它可以帮助您找到问题。

如果您

认为C++代码导致了问题,则可以将C++从iPhone项目中复制出来并创建一个Mac项目。 有了这个,您可以设置各种压力测试。 而且,您也应该能够使用valgrind。