iPhone-调试“;未分配要释放的指针";错误

iPhone-调试“;未分配要释放的指针";错误,iphone,cocoa-touch,malloc-history,Iphone,Cocoa Touch,Malloc History,过度释放指针时,您可能会看到以下错误: “未分配要释放的指针” 在使用模拟器进行调试时,我添加了一个构建参数MallocStackLogging=YES——这允许我在终端中使用malloc_历史记录来跟踪过度释放指针的位置 如果我用这个build参数在设备上调试,我会得到各种各样的控制台错误“无法创建堆栈日志文件”等等 奇怪的是,我在设备上看到了一些过度释放的指针错误,但在模拟器上没有 有没有人有使用该设备追踪这些信息的经验 谢谢 我通常使用NSZombie来实现这些功能,请查看您需要在目标可执

过度释放指针时,您可能会看到以下错误:

“未分配要释放的指针”

在使用模拟器进行调试时,我添加了一个构建参数MallocStackLogging=YES——这允许我在终端中使用malloc_历史记录来跟踪过度释放指针的位置

如果我用这个build参数在设备上调试,我会得到各种各样的控制台错误“无法创建堆栈日志文件”等等

奇怪的是,我在设备上看到了一些过度释放的指针错误,但在模拟器上没有

有没有人有使用该设备追踪这些信息的经验


谢谢

我通常使用NSZombie来实现这些功能,请查看您需要在目标可执行文件上设置MallocStackLogging env变量

要访问这些设置,请从XCode中的“组和文件”窗格中选择可执行文件,然后获取信息


转到Arguments选项卡,将以下条目添加到“要在环境中设置的变量”框中:

另一种方法。确保打开NSZombie,以便它报告获得额外版本的对象的内存地址。然后使用性能工具->对象分配运行。这将带来仪器。查看Xcode organizer提供的控制台日志。一旦你得到崩溃查找内存地址在仪器。您将在该对象上看到mallocs/free的整个历史记录,以及直接进入代码的链接。

请测试程序是否存在内存泄漏,还需要检查自动释放以及是否正确释放对象。我们还需要检查释放的对象是否已分配内存。您还需要注意自动释放,因为我们可能会意外释放数组、字符串或任何已自动释放的对象…希望它能帮到您并起作用


提示:您可以通过分析您的项目(单击shift+command+k)来测试是否存在泄漏。

我无法通过这些精确的方向(在Xcode 4.2.1中)获得泄漏-我必须运行Xcode,然后在运行时连接仪器。我已经为我当前的方案打开了“启用僵尸对象”,一旦我触发了异常,仪器就会像冠军一样锁定,并将我带到僵尸地址的历史记录中。我查看了初始分配的堆栈跟踪,发现一个不必要的
[autorelease]
导致了异常。很棒的工具!完整的“操作方法”在2010年的WWDC视频“第311课时-使用仪器的高级内存分析”中显示,时间为31:50。