如何在Xcode调试器中查看NSDictionary变量的内容?

时间:2008-09-22 01:45:39

标签: objective-c cocoa xcode debugging

有没有办法通过Xcode调试器查看NSDictionary变量的键/值对?以下是在变量窗口中完全展开时的信息范围:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

我期待它向我展示字典的每个元素(类似于数组变量)。

7 个答案:

答案 0 :(得分:136)

在gdb窗口中,您可以使用po来检查对象。

下式给出:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

在添加对象后设置断点,您可以检查字典中的内容

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

当然这些是打印得很好的NSString个对象。 YMMV与其他复杂对象。

答案 1 :(得分:30)

您可以右键单击任何对象(ObjC或Core Foundation)变量,然后选择“将描述打印到控制台”(也可以在Run-> Variables View中)。这会打印出obejct的-debugDescription方法的结果,该方法默认调用-description。不幸的是,NSDictionary会覆盖这一点以产生一堆您通常不关心的内部数据,因此在这种特定情况下,craigb的解决方案更好。

显示的键和值也使用-description,因此如果您需要有关集合和其他地方对象的有用信息,则必须覆盖-description。我通常会沿着这些行实现它,以匹配默认NSObject实现的格式:

-(NSString *) description
{
    return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}

答案 2 :(得分:6)

您可以使用CFShow()

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

在输出中,您将看到

{
  bar = foo;
  buz = fiz;
}

答案 3 :(得分:3)

XCode 4.6添加了以下可能对您有帮助的功能

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

现在您可以检查这些对象类型,而无需在控制台中打印整个对象。享受!

来源:http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html

答案 4 :(得分:1)

点击你的词典,然后点击小“i”图标,它应该做的工作:-) Xcode5, view the value of a dict

答案 5 :(得分:0)

您也可以使用NSLog

您也可以进入调试区域或xcode,然后查找All Variables, Registers, Globals and Statics然后选择您的变量。右键单击它。然后选择Print description of "...."

希望它有所帮助!

答案 6 :(得分:0)

如果您想在现代XCode的断点操作中打印这些内容(是的,我距原始帖子还剩10年!),请在“日志消息”操作中使用以下断点表达式:

@ myDictionary.description @

下面是我的断点操作的屏幕快照,其中变量事件是一个NSString,变量contextData是我正在记录以下内容的NSDictionary: