【问题标题】:How to interpret some of the Error messages from Xcode console?如何解释来自 Xcode 控制台的一些错误消息?
【发布时间】:2009-11-15 02:51:57
【问题描述】:

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

2009-11-14 14:31:57.513 FC[915:5b27] *** -[SearchResultParser respondsToSelector:]:消息发送到已释放实例 0x82d28e0

这并不是最糟糕的,因为它实际上告诉我它与选择器有关并且它源自 SearchResultParser。但通常我只是收到“发送到已释放实例 0x897867d6 的消息”。

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

也许我被宠坏了,但我已经习惯了来自错误消息的更多信息,尤其是来自动态语言的信息:比如发生错误的行号、相关对象的实例名称等等。

我阅读了有关使用 Instruments 的内容,当然也有断点。当答案就在你面前:“0x82d28e0 导致崩溃”!

以一种糟糕的方式,我让我想起了我从微控制器 IDE 收到的错误消息:)

有没有办法从实例地址出发,例如0x82d28e0 到实例名称? 有没有办法使用来自控制台的信息来缩小代码中导致停止的位置?尤其是“发送到已释放实例的消息”,因为我显然有点渴望我的内存管理:)

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

【问题讨论】:

  • 你检查过调试器窗口吗?它通常会显示完整的堆栈跟踪以及发生错误的代码行。
  • 一开始我有点困惑,因为调试器似乎只是汇编代码,然后我尝试引入故意的释放错误,你是对的,我向我显示了释放错误之后的行或块我自己的代码。这比我以前更接近了:) 谢谢 MihaiD

标签: iphone memory-management console


【解决方案1】:

这个错误的问题是,在错误发生的那一刻,被释放的实例不再可用,所以调试器没有关于它的信息。这种错误在具有自动内存管理的语言中永远不会发生,因此在这方面您无法真正比​​较它们。

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

【讨论】:

  • 谢谢 Ole :) 我去检查了,实际上我有 NSZombieEnabled=YES。我想我几周前读过一些关于它的东西,然后设置了这个值。我还需要做些什么吗?我真的找不到任何其他“NSZombies 很棒,设置为 YES”的东西。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 2021-10-04
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2020-05-01
  • 1970-01-01
相关资源
最近更新 更多