【问题标题】:How can I view the values inside an object in the Xcode debugger?如何在 Xcode 调试器中查看对象内的值?
【发布时间】:2011-03-28 12:59:05
【问题描述】:

我知道这听起来可能是个愚蠢的问题,因为它在大多数现代 IDE 中是一个微不足道的功能,但我正在深入研究 iOS 开发,并且对平台和 SDK 越来越熟悉,但我无法弄清楚这一点。我在 MS Visual Studio 方面拥有丰富的经验,我发现 Xcode 的工作方式非常相似,但相比之下它仍然缺乏相当多的功能,但仍然是一个非常好的 IDE。在调试方面,Xcode 的工作方式与 Visual Studio 非常相似,您可以将鼠标悬停在变量上,它将显示其当前值。然而,当涉及到对象变量时,它几乎总是只给出地址和展开箭头,它展开为“NSObject”,它展开为“isa”,它展开为所有不告诉我任何东西的属性。我已经习惯了像 Visual Studio 这样的 IDE,它足够聪明,可以进行一些自省并为我显示实际对象以及所有它的直接属性和值。我假设 Xcode 足够聪明,可以做到这一点,我只是没有正确使用它。

如果我在涉及对象实例(比如说 NSDateComponents 实例)的代码行上设置断点,我如何查看其属性的值(即年、周、日、小时等)?

提前感谢您的帮助!

编辑:这是我从检查的每个对象中获得的信息的屏幕截图... alt text http://joecrotchett.com/images/misc/example.jpg

【问题讨论】:

  • 这很奇怪。它应该向您显示实际数据。每个班级都这样吗?
  • 真的,这不正常吗?是的,它一直在发生。
  • 所有对象都会发生这种情况还是只发生在NSDateComponents?
  • 所有对象。如果有人有机会,他们是否可以编写一行快速的代码来创建和初始化一个 NSDateComponents 对象,对其进行调试并发布屏幕截图?我真的很惊讶没有人知道我在说什么。

标签: iphone xcode ipad debugging ios


【解决方案1】:

将鼠标悬停在一个变量上,会弹出一条关于它的行。将鼠标稍微向右移动,然后将鼠标悬停在弹出窗口左侧的三角形箭头上,该箭头会向下,然后会打开另一个弹出窗口,显示该对象的所有命名属性。

你也可以让它打印它的“描述”值。稍微向右移动指针,直到它超过两个小的“上/下”箭头。然后左(嗯,“主”)单击。将出现一个弹出窗口,其中一个选项是“打印说明”。如果你点击它,它会将其-description 方法的输出放到控制台中。

【讨论】:

  • 感谢 dan,但就像我说的,当我单击弹出窗口左侧的箭头时,它始终显示“NSObject”作为唯一属性。
  • 是的,好吧,看到箭头和对象名称之间的“上下颠簸”的小箭头了吗?点击那个。那里会有一个“打印说明”选项。看看这是否告诉你什么。也可以在控制台中使用“po”来打印变量的描述,当然……
  • 我试过了,它打印的只是“”
  • 我可以在 Xcode 7 上通过单击眼睛符号旁边的小 (i)(圆圈中的“i”)来执行此操作(将鼠标悬停在变量上并打开/检查其属性时)带有小三角形。)每次我单击(i)打印描述出现在控制台中。变量的每个属性似乎都有一个眼睛符号和一个 (i) 符号。
【解决方案2】:

这令人沮丧。调试器必须知道每个对象的结构,而它显然不知道。不过,以前情况要糟糕得多。与 NSArray 一样,它们是一个对象数组。调试器不知道具体是什么类型的对象,这是由于 Objective-C 语言,而不是调试器。

当您深入研究 iOS 开发时,我想您会发现 Apple 在开发方面比其竞争对手落后了大约 15 年。这不是开玩笑。但他们正在迎头赶上,相信我,以前情况更糟!

【讨论】:

  • 哇,太糟糕了。哦,好吧,我想我会回去使用一堆 NSLog 语句 :( 自从我十多年前编写汇编代码以来,我不必使用“打印到屏幕”的调试方法。好吧,我现在就停止抱怨了。再次感谢!
  • 虽然一个很好的咆哮(我也觉得)因为它应该是自动的,但有可能大大改进事情。正确的做法是implement description,如其他答案所示。
【解决方案3】:

对于我的数据对象,我倾向于覆盖description 方法并输出带有对象摘要的字符串。像这样的:

Printing description of myContact:
{name=Homer, lastname=Simpson, ...}

这意味着您可以在调试器中快速检查对象,或者当您将其NSLog 发送到控制台时。如果该描述包含所有相关数据,您还可以覆盖isEqual:,以便它使用描述来比较两个对象。

【讨论】:

    【解决方案4】:

    您还可以通过转到右键菜单上的“编辑摘要格式”来更改 Xcode 在局部变量窗格中显示值的方式。

    例如,要让它调用description 方法,您可以将其设置为

    {(NSString*)[$VAR description]}:s
    

    这里有更多细节: understanding Xcode debugger var display

    【讨论】:

      【解决方案5】:

      好吧,又过了几年,xcode 仍然在大多数对象上显示 isa = (Class),而不是能够弄清楚对象是什么。

      即使几年过去了,Apple 仍然落后,因为竞争对手在他们周围循环运行(他们现在比竞争对手落后 16 年)。

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2014-11-29
        • 2019-01-31
        • 2015-02-12
        相关资源
        最近更新 更多