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

Ios 释放对象的校验和不正确-如何在设备上进行故障排除?,ios,ipad,cocoa-touch,malloc,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

我花了几天时间试图找出一个错误,这是许多经验丰富的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
我在网上搜索了一下,发现很多人建议使用
NSZombieEnabled
MallocStackLogging
,但似乎有一点是肯定的,除非您使用模拟器,否则这些都不起作用。不幸的是,除非我使用实际的设备,否则我永远无法让崩溃发生,在这种情况下,每隔几分钟就会发生一次

使用MallocStackLogging时,我会将一个文件写入本地IPad(在/private/var/mobile/Applications/…),但似乎没有任何方法将该.link文件传输到我的本地机器(因为该设备没有越狱),即使可以,也似乎无法在有malloc_历史的本地机器上使用它

我所能做的就是在运行Instruments->Allocations时让它崩溃,但当我查看该区域时,它指向50+个分配(来自许多不同的函数),但所有分配都已解除分配,不再有效。所有这些都是内部分配,在ImageIO中(开始、通过、哈夫、解码器等)

我正在处理一个相当复杂、庞大的代码库,所以对整个项目进行代码检查是不可行的

我真的需要一些方法让调试器在校验和被违反时立即中断,而不是在它碰巧执行不相关的malloc时中断,因为malloc不提供任何有用的信息。在
malloc\u error\u break
处设置断点似乎没有效果

很明显,我在某个地方有一个无效的指针,它不应该写入内存,但我一直在思考如何缩小导致它的代码片段

任何建议都会很有帮助


提前感谢。

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

我一直在试着调试该设备,但不确定如何确定执行坏内存写入的代码。我尝试了静态分析器,但是没有相关的结果,不过还是谢谢你的想法。我不想分享我的代码,你能给我一些解决这类问题的一般建议吗?你试过nikita zhuk的clang静态分析器吗?僵尸表演什么?尝试在设备上调试应用程序,并尝试重现崩溃。同时尽可能地清除泄漏。