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


85

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

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

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

Answers:


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


7
嗨!什么是gdb?什么是宝?不确定了解...谢谢您的帮助!:)
马丁

1
好的,所以我发现GDB代表GNU调试器,实际上是Xcode的调试器窗口。现在我要查找什么是po
马丁,2009年

18
好!因此,gdb实际上是控制台中的提示,您可以在其中输入命令。通过输入“ po object_name”,您可以在控制台中打印出对象内容。
马丁

7
po是打印对象的别名
Brad Cupit 2010年

精彩!等效于PHP中的“ echo var_dump()”或“ print_r()”。
mpemburn

30

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

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

-(NSString *)说明
{
    返回[NSString stringWithFormat:@“ <%@%p> {foo:%@}”,[self class],self,[self foo]];
}

6

您可以使用CFShow()

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

在输出中,您将看到

{
  bar = foo;
  buz = fiz;
}


1

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


1

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

@ myDictionary.description @

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


0

您也可以使用NSLog

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

希望能帮助到你!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.