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

Dar*_*ong 85 debugging xcode cocoa objective-c

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

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720
Run Code Online (Sandbox Code Playgroud)

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

cra*_*igb 139

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

给定:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
Run Code Online (Sandbox Code Playgroud)

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

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 好!所以gdb实际上是Console中的提示,您可以在其中输入命令.通过键入"po object_name",您可以在控制台中打印对象内容. (18认同)
  • 嗨!什么是gdb?什么是宝?不确定理解...感谢您的帮助!:) (7认同)
  • po是print-object的别名 (7认同)
  • 这已经很晚了,但你是一个伟大的伟人. (2认同)

Jen*_*ton 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]];
}


ura*_*pro 6

你可以使用CFShow()

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

在输出中你会看到

{
  bar = foo;
  buz = fiz;
}
Run Code Online (Sandbox Code Playgroud)