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

Posted

技术标签:

【中文标题】如何在 Xcode 调试器中查看 NSDictionary 变量的内容?【英文标题】:How to view contents of NSDictionary variable in Xcode debugger? 【发布时间】:2010-09-11 21:14:27 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

嗨!什么是gdb?什么是宝?不确定明白...感谢您的帮助! :) 好吧,我发现 GDB 代表 GNU 调试器,实际上是 Xcode 的调试器窗口。现在我需要找到 po 是什么 好的!所以gdb其实就是Console中的一个prompt,你可以在里面输入命令。通过键入“po object_name”,您可以在控制台中打印出对象内容。 po 是 print-object 的别名 太棒了!等效于 php 中的“echo var_dump()”或“print_r()”。【参考方案2】:

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

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

-(NSString *) 描述

    return [NSString stringWithFormat:@"foo: %@", [self class], self, [self foo]];

【讨论】:

【参考方案3】:

你可以使用 CFShow()

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

在输出中你会看到


  bar = foo;
  buz = fiz;

【讨论】:

【参考方案4】:

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

【讨论】:

这对我来说是错误的——只显示我的 NSDictionary 的一部分【参考方案5】:

点击你的听写,然后点击小“i”图标,它应该可以完成这项工作:-)

【讨论】:

【参考方案6】:

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

@myDictionary.description@

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

【讨论】:

【参考方案7】:

您也可以使用NSLog。

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

希望对你有帮助!

【讨论】:

以上是关于如何在 Xcode 调试器中查看 NSDictionary 变量的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xcode 5 可视化调试器快速查看自定义对象?

如何在 XCode 调试器中评估语句

在XCode 4中调试时查看内部 std :: vector数据

Xcode调试之View Memory(查看内存)

Xcode调试之View Memory(查看内存)

xcode7怎么真机调试详细步骤