如何解释Xcode控制台的一些错误消息?

时间:2009-11-14 13:52:39

标签: iphone memory-management console

由于我的程序涉及越来越多的代码,我开始对控制台中抛出的错误消息感到有点沮丧:

  

2009-11-14 14:31:57.513 FC [915:5b27] *** - [SearchResultParser respondsToSelector:]:发送到解除分配的实例0x82d28e0的消息

这个并不是最糟糕的,因为它实际上告诉我它与选择器有关并且它起源于SearchResultParser。但通常我只是将“消息发送到解除分配的实例0x897867d6”。

其他时候它是堆栈转储,它只是告诉我,我认为是当前堆栈中对象的内存分配。

也许我被宠坏了,但我已经从错误消息中使用了更多信息,特别是来自动态语言:如发生错误的行号,有问题的对象的实例名称等等。

我读到了使用乐器,当然还有断点。当答案就在你面前时,它可以感觉有点无意义地通过20多个解除分配和300行代码找出导致停止的原因:“0x82d28e0导致崩溃”!

我用一种糟糕的方式提醒我从微控制器IDE获得的错误信息:)

有没有办法从实例地址转到,例如0x82d28e0到实例名称? 有没有办法使用控制台中的信息来缩小代码中停止的位置?特别是“发送到解除分配的实例的消息”,因为我显然有点急于我的内存管理:)

希望有人可以帮助我更好地了解控制台:) 感谢。

1 个答案:

答案 0 :(得分:4)

此错误的问题在于,在发生错误时,解除分配的实例不再可用,因此调试器没有关于它的信息。这种错误从未在具有自动内存管理的语言中发生,因此您无法在这方面进行真正的比较。

查看NSZombieEnabled参数。如果启用僵尸,当代码想要释放它们时,对象将转换为僵尸。这些可以在您的代码再次尝试发布时为您提供有关自己的更多信息。