在 iPhone 上追踪越界访问
Track down out-of-bounds access on iPhone
我平均工作(~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。
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 越界访问 CUDA 共享内存
- 访问矢量元素时索引越界异常
- 为什么这种越界访问没有段错误?
- 为什么编译器允许越界数组访问,即使使用 constexpr 索引也是如此
- 为什么 CppCheck 会为此静态 const 数组提供越界访问错误
- 在 iPhone 上追踪越界访问
- 检查可能的访问/创建越界指针
- 为什么当我访问数组的越界元素时没有收到运行时错误?