释放对象的校验和错误 - 如何在设备上进行故障排除?

时间:2011-07-15 14:30:38

标签: ios ipad cocoa-touch malloc

我花了几天的时间试图找出许多经验丰富的IOS开发人员在他们职业生涯中曾经看过的错误:

MyApp-IPad(1403,0x5ab3000) malloc: *** error for object 0x2b3aa04: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

我在网上搜索过,发现有很多人建议使用NSZombieEnabledMallocStackLogging,但是除非您使用的是模拟器,否则它们似乎无法使用。不幸的是,除非我使用实际设备,否则我永远不会发生崩溃。在这种情况下,它每隔几分钟就会发生一次。

使用MallocStackLogging时,我得到一个写入本地IPad的文件(在/ private / var / mobile / Applications / ....)但似乎没有办法将.link文件传输到我的本地机器(因为设备没有越狱),即使我可以在我的本地机器上使用malloc_history似乎无法使用它。

我能做的最好的事情就是在运行Instruments-> Allocations时让它崩溃,但是当我查看该区域时,它指向了50多个分配(来自许多不同的功能),但所有这些都已经解除分配并且不再存在。所有这些都是内部分配,在ImageIO(start_pass_huff_decoder等)中

我正在使用相当复杂的大量代码,因此对整个项目进行代码检查是不可行的。

我确实需要一些方法让调试器在违反校验和时立即中断,而不是稍后当它碰巧正在执行一个不提供任何有用信息的无关malloc时。在malloc_error_break设置断点似乎没有效果。

很明显我在某处写了一个无效的指针它不应该写入内存,但我不知道如何缩小导致它的代码段。

任何建议或建议都会非常有用!!!

提前致谢。

1 个答案:

答案 0 :(得分:1)

您是否尝试使用设备进行调试?试试nikita zhuk的clang静态分析器和xcode内置的构建和分析功能。您的问题可能是由于一些内存泄漏。它们都不是完美的解决方案,但你会在某些方面获得帮助。尝试,如果你可以通过邮件发送你的代码,我会调查问题。如果你通过邮件发送代码没有任何问题,请发送给我。首先尝试nikita zhuk的clang静态分析仪。