追踪iPhone上的越界访问

时间:2012-04-18 12:33:59

标签: iphone c++ objective-c ios memory

我平均工作(约20k行代码,Objective-C与C ++混合),我想找出一个EXC_BAD_ACCESS错误。

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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