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

Objective c 如何在Xcode调试器中查看NSDictionary变量的内容?,objective-c,cocoa,xcode,debugging,Objective C,Cocoa,Xcode,Debugging,有没有办法通过Xcode调试器查看NSDictionary变量的键/值对?以下是在变量窗口中完全展开时的信息范围: Variable Value Summary jsonDict 0x45c540 4 key/value pairs NSObject {...} isa 0xa06e0720 我希望它能显示字典中的每个元素(类似于数组变量) 在gdb窗口中,您可以使用po检查对象 鉴于: NSMutableDictionary* dict = [[NSMutab

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

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

我希望它能显示字典中的每个元素(类似于数组变量)

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

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

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

-(NSString *) description { return [NSString stringWithFormat:@"<%@ %p>{foo: %@}", [self class], self, [self foo]]; } -(NSString*)说明 { 返回[NSString stringWithFormat:@“{foo:%@},[self class],self,[self foo]]; } 您可以使用CFShow()

在输出中,您将看到

{
  bar = foo;
  buz = fiz;
}
您也可以使用

您还可以进入调试区域或xcode,然后查找所有变量、寄存器、全局变量和静态变量,然后选择您的变量。右键点击它。然后选择打印“…”的说明。


希望有帮助

XCode 4.6添加了以下功能,这些功能可能对您有所帮助

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger
现在您可以检查这些对象类型,而不必在控制台中打印整个对象。享受吧


来源:

单击您的dict,然后单击小“i”图标,它应该可以完成任务:-)

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

@myDictionary.description@

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

嗨!什么是gdb?阿宝是什么?不太明白。。。谢谢你的帮助!:)我发现GDB代表GNU调试器,实际上是Xcode的调试器窗口。现在我要找到什么是poOK!因此,gdb实际上是控制台中的一个提示符,您可以在其中输入命令。通过键入“po object_name”,您可以在控制台中打印对象内容。po是print object的别名!相当于PHP中的“echo var_dump()”或“print_r()”。这对我来说是个错误——只显示了NSDictionary的一部分
The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger