2010-08-11 91 views
29

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

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

在此先感谢您的帮助!

编辑:这里的信息,我与每一个对象我检查得到的截图... alt text http://joecrotchett.com/images/misc/example.jpg

+0

这很奇怪。它应该显示你的实际数据。这对每个班级都会发生吗? – zneak 2010-08-11 17:55:33

+3

真的,这是不正常的?是的,它总是发生。 – BeachRunnerFred 2010-08-11 17:57:55

+0

它发生所有对象还是只是'NSDateComponents'? – kubi 2010-08-11 18:27:42

回答

28

这很令人沮丧。调试器必须知道每个对象的结构,它显然没有。不过,它曾经更糟糕。与NSArray的一样,它们是一组对象。调试器并不知道具体是什么类型的对象,这是由于Objective-C语言,而不是调试器。当你深入iOS开发时,我想你会发现苹果在开发时比竞争对手落后了大约15年。这不是玩笑。但他们正在赶上,相信我,它曾经更糟!

+0

哇,太糟糕了。哦,我想我会回去使用一堆NSLog语句:(自从我写了十年前的汇编代码以来,我没有必须使用“打印到屏幕”的调试方法。我现在不再抱怨了,再次感谢! – BeachRunnerFred 2010-08-12 00:40:41

+1

虽然我觉得它应该是自动的,但它可以大大改善,正确的做法是[执行'description'](http: //stackoverflow.com/a/11467498/2547229)如其他答案所示 – Benjohn 2015-11-30 12:01:19

2

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

你也可以打印它的“描述”值。稍微向右移动指针,直到它位于两个小“上/下”箭头的上方。然后离开(好,“主”)点击。弹出窗口将显示,一个选项将显示“打印说明”。如果你点击它,它会把它的-description方法的输出到控制台。

+0

感谢丹,但就像我说的,当我点击弹出窗口左侧的箭头时,它总是显示“NSObject”作为唯一的属性。 – BeachRunnerFred 2010-08-11 18:03:21

+0

是的,那么,看看箭头和对象名称之间的小箭头“uppy柔弱”?点击那个。那里会有一个“打印说明”选项。看看有没有告诉你什么。您可以在控制台中使用“po”打印变量的描述,当然... – 2010-08-11 18:23:28

+0

我试过,它打印的所有内容都是“” – BeachRunnerFred 2010-08-11 18:25:40

5

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

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

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

+0

这是真实的答案 – box86rowh 2012-08-02 15:14:36

2

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

例如,为了得到它调用description方法,你将它设置为

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

一些细节在这里: understanding Xcode debugger var display

1

嘛,一对夫妇多年过去了,Xcode中仍然在大部分对象上显示isa =(Class),而不是能够弄清楚对象是什么。

即使过了几年,苹果仍然落后,因为竞争在他们周围环绕着(他们现在已经落后于竞争对手现状16年)。

相关问题