85

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

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

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

4

7 回答 7

140

在 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 与其他复杂对象。

于 2008-09-22T01:51:12.440 回答
30

您可以右键单击任何对象(ObjC 或 Core Foundation)变量并选择“Print Description to Console”(也在运行->变量视图中)。这将打印对象-debugDescription方法的结果,默认情况下调用-description. 不幸的是,NSDictionary覆盖它以产生一堆您通常不关心的内部数据,因此在这种特定情况下,craigb 的解决方案更好。

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

-(NSString *) 描述
{
    return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]];
}
于 2008-09-22T09:55:28.720 回答
6

您可以使用 CFShow()

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

在输出中你会看到

{
  bar = foo;
  buz = fiz;
}
于 2012-06-14T09:07:48.397 回答
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

于 2013-04-19T22:06:15.173 回答
1

单击您的字典,然后单击小“i”图标,它应该可以完成工作:-) Xcode5,查看一个dict的值

于 2013-11-26T04:48:06.087 回答
1

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

@myDictionary.description@

下面是我的断点操作的屏幕截图,其中变量 event 是 NSString,变量 contextData 是我正在记录以下内容的 NSDictionary ::

于 2019-03-19T21:00:36.200 回答
0

您也可以使用NSLog

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

希望能帮助到你!

于 2012-12-19T13:56:41.453 回答