在Xcode中观察变量

19

我试图在Xcode中观察一个变量。 我按照这里的说明,在断点处暂停,选择运行>变量视图>...但除了“启用数据格式化程序”之外,其他选项都是灰色的。 有什么想法吗?

我使用的是Xcode版本3.1.3。


1
一旦您触发断点,您应该能够将鼠标悬停在断点上,它会显示变量信息。 - zpesk
你确定你正在运行一个关闭优化的调试版本吗? - Dolphin
我尝试了调试构建而不是发布版本,但问题仍然存在。 - Stu
2
@zPesk — 请注意,“监视点”与“断点”是不同的。前者用于监视特定的数据地址,而后者用于在给定的代码行停止。 - Quinn Taylor
5个回答

19

很遗憾,我也没能成功使用“运行”菜单创建监视点。需要注意的一点是,当变量超出作用域时,监视点可能会变得无效。

如果你愿意深入一些,可以使用一些低级别的gdb命令来设置一个监视点,以便监视内存本身的地址。例如,在你链接到的指南中,他们展示了如何监视变量path,其指针值为0xbfffeb70。要手动设置该地址的监视点,请在调试器控制台(打印调试输出信息的位置)中点击“(gdb)”提示符后,输入类似以下内容的命令:

watch *((int*)0xbfffeb70)

这个晦涩的语法是必要的,因为gdb期望输入的是C表达式。想要了解更多细节,请访问此链接并跳转到标题为“Using hardware watchpoints”的部分。(我在Intel机器上进行测试,不确定PowerPC如何处理。)使用这种方式设置监视点时,Xcode将在监视点被触发时弹出下拉菜单,并告知您该值是如何被改变的,gdb将在控制台中打印相同的信息。


2
如果你想要观察 C++ 方法的成员,我发现这个变量非常有用:watch -location mTextFormatted。它揭示了一个与静态转换和动态转换相关的严重错误 ;) - Ivan Vučica
2
lldb的替代方法是watchpoint set expression -- 0xbfffeb70或简写为w s e -- 0xbfffeb70 - Miguel Guerreiro

8
我刚遇到了这个问题。以下是解决方案:右键点击变量名称并从弹出菜单中选择“在窗口中查看变量”。它应该在底部附近。

4
在调试区的监视列表中右键单击,选择“添加表达式…”来添加断点。
如果您看到不同的菜单,请先点击当前突出显示的变量之外的任何位置,以便在右键单击时没有任何东西被突出显示。
请参考以下截图:enter image description here

当表达式发生改变时,它不会停止。 - DanSkeel

2
这里提供的答案仅适用于使用gdb编译器的情况。对于那些正在寻找使用lldb编译器设置监视点选项的人,我有个坏消息:(XCode 4.3.2和lldb 3.1)它还没有实现,尽管lldb文档说可以这样做。
请查看此电子邮件。与gdb相比,lldb命令可以在这里找到。

wa s e -- <addr> worked for me, e.g.: wa s e -- 0xbfffeb70 - Ryan H.

1
我试图在XCode 5中解决这个问题。最后,我在输出控制台的右下角找到了一个“变量视图”按钮。如果未启用,则左侧为灰色,右侧为白色的小矩形。我不确定XCode 3是否有此功能,但我认为大多数人都已经升级了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接