在默认(即我的)配置中,Xcode在变量的调试器窗口中有点无用,特别是那些常见的Objective-C集合。
当我展开一些对象时,调试器似乎通常想要显示底层的Obj-C结构,所以我正在查看isa
s和类层次结构。
但是我几乎总是想要的东西对于对象本身而言在语义上是有意义的。例如。对于NSDictionary
,理想情况下我希望看到一个键/值列表。如果这些键和值是,例如NSString
s,我只想查看字符串值,而不是复杂的嵌套对象。 NSSet
,NSArrays
和NSData
内的字节也是如此。并且NSString
虽然通常在摘要列中获取它们的字符串表示,但是当它们很长时(例如,一个太长而无法放入列中的路径名似乎不会滚动)也无法查看 - 当我双击它时,我得到显示模板字符串,所以我也不能选择/复制它。
我最近花了一些时间在Eclipse上调试Java,并且由于它的所有缺点,Eclipse知道所有Java集合,并且在字符串或集合的内容中有一个简单的单行转储,或者当你发现它时在调试器中。
有没有办法在Xcode中获得这个?我错过了一些明显的东西,还是应该潜入显示模板系统?我知道那里有一些支持,因为NSArrays似乎得到一种特殊的列表格式,NSDictionaries获得“2键/值对”摘要等。
编辑:可以放入GDB以获取更多关于对象的数据。我很沮丧,GDB的po
作用于NSDictionary
给出了我期望从GUI调试器获得的那种非常有用的输出。可以在没有上下文切换到控制台的情况下复制吗?
我非常喜欢Xcode环境,但是我一直使用的对象几乎完全不透明,这确实阻碍了调试时间。感谢。
答案 0 :(得分:4)
是的,在调试期间查找的XCode变量很弱,但是它基于gdb而你可以控制它以为控制台。在调试期间打开控制台并编写您需要的任何命令,以查看NSDictionary * dic;内容就像
一样简单po dic
po打印[obj description]结果中显示的数据。您也可以调用任何方法,如
po [dict valueForKey:@"myKey"], or p(NSRect) [[self view] frame]
您可以获得更多gdb帮助
答案 1 :(得分:4)
我会看两个特殊的GDB输出(如Gobra所说),还有显示模板。
显示内容看起来很复杂但实际上非常简单 - 这是makign NSIndexPath显示“ Sec:x Row:y ”的示例:
Sec:{(int)[$VAR section]} Row:{(int)[$VAR row]}
因此,您可以为任何对象类型打印描述性文本和多个值。显示变量适用于该类型的所有类,并且在XCode运行之间以及跨项目之间保持不变。
最后要注意的一件事是,对于任何返回字符串的内容,您需要在“{}”对之后添加“:s”,如下所示:
{[myClass description]}:s
如果您需要清除显示模板,只需单击要编辑的行并将其全部删除 - 您将返回默认值。因此,为任何对象快速创建临时格式化程序非常容易,可以让您准确地看到感兴趣的内容。
答案 2 :(得分:1)