释放对象的校验和不正确 – 如何在设备上进行故障排除?

我花了几天的时间试图找出许多经验丰富的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多个分配(来自许多不同的function),但是所有分配都已经解除分配并且不再存在。 所有这些都是内部分配,在ImageIO(start_pass_huff_decoder等)中

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

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

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

任何建议或意见都会非常有帮助!

提前致谢。

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