iPhone - 调试“释放指针未分配”错误

时间:2008-11-17 15:04:46

标签: iphone cocoa-touch malloc-history

当释放指针时,您可能会看到错误,例如

“没有分配被释放的指针”

在使用模拟器进行调试时,我添加了一个构建参数MallocStackLogging = YES - 这允许我在终端中使用malloc_history来跟踪我在哪里释放指针。

如果我使用此构建参数在设备上进行调试,我会收到各种控制台错误“无法创建堆栈日志文件”等。

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

有没有人有使用设备本身跟踪这些的经验?

谢谢!

4 个答案:

答案 0 :(得分:9)

另一种方法。确保打开NSZombie,以便报告获得额外版本的对象的内存地址。然后使用Performance Tool-> Object Allocations运行。这将带来乐器。查看Xcode管理器提供的控制台日志。一旦你得到崩溃查找仪器中的内存地址。您将在该对象上看到mallocs / frees的完整历史记录,以及直接链接到代码中的链接。

答案 1 :(得分:1)

我通常会使用NSZombie来检查this

答案 2 :(得分:0)

您需要在目标可执行文件上设置MallocStackLogging env变量...

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

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

答案 3 :(得分:0)

请测试程序是否存在内存泄漏,还要检查自动释放以及是否正确释放对象。我们还需要检查释放的对象是否分配了内存。您还需要注意自动释放​​,因为不小心我们可能会释放一个数组或一个字符串或任何已经自动释放的对象...希望它有帮助并且有效!

提示:您可以通过分析项目来测试泄漏(点击shift + command + k)