在 Xcode 中观察变量

Posted

技术标签:

【中文标题】在 Xcode 中观察变量【英文标题】:Watching variables in Xcode 【发布时间】:2009-06-24 19:52:20 【问题描述】:

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

我使用的是 Xcode 3.1.3 版。

【问题讨论】:

一旦你遇到断点,你应该可以将鼠标悬停在断点上,它会显示变量信息。 您确定您正在运行调试版本并关闭优化? 我尝试了调试版本而不是发布版本,但问题仍然存在。 @zPesk — 请注意,“观察点”与“断点”不同。前者用于监控特定的数据地址,后者用于在给定的代码行处停止。 【参考方案1】:

不幸的是,我也没有从“运行”菜单创建观察点来为我工作。需要注意的一件事是,当变量超出范围时,观察点可能会变得无效。

如果您不介意再深入一点,您可以使用一些低级的gdb 命令为内存本身的地址设置观察点。例如,在您链接到的指南中,他们展示了如何观察变量path,它是一个值为0xbfffeb70 的指针。要手动设置该地址的观察点,请在“(gdb)”提示符后单击调试器控制台(打印调试输出的位置)并键入如下内容:

watch *((int*)0xbfffeb70)

神秘的语法是必要的,因为 gdb 期望输入为 C 表达式。如需更多详细信息,请visit this link 并跳转到标题为“使用硬件观察点”的部分。 (我在 Intel 机器上进行测试,不确定 PowerPC 是如何处理它的。)当您以这种方式设置观察点时,Xcode 会在达到观察点时通过下拉表提醒您并告诉您值是如何更改的,并且gdb 将在控制台中打印相同的信息。

【讨论】:

如果你想观察一个 C++ 方法的成员,我发现这个变体非常有用:watch -location mTextFormatted。揭示了一个与静态与动态转换相关的令人讨厌的错误;) lldb 替代方案是watchpoint set expression -- 0xbfffeb70 或简称w s e -- 0xbfffeb70【参考方案2】:

我刚刚遇到了这个问题。这是一个解决方案:右键单击变量名称,然后从出现的菜单中选择“在窗口中查看变量”。它应该在底部附近。

【讨论】:

【参考方案3】:

添加断点。在调试区域的监视列表中右键单击并选择“添加表达式...”

如果您获得不同的菜单,则必须单击当前突出显示的变量,以便在您右键单击时不会突出显示任何内容。

【讨论】:

当表达式改变时它不会停止【参考方案4】:

这里给出的答案只有在您使用gdb 编译器时才有效。对于那些正在寻找使用lldb 编译器设置观察点的选项的人,我有个坏消息:

尽管 lldb 文档说你可以,但它不能工作 jet(XCode 4.3.2 和 lldb 3.1)。

查看this 电子邮件。与gdbs 相比,lldb 命令可以找到here

【讨论】:

wa s e -- <addr> 为我工作,例如:wa s e -- 0xbfffeb70【参考方案5】:

我试图在 XCode 5 中解决这个问题。我终于在输出控制台的右下角找到了一个“变量视图”按钮。左边是灰色的小矩形,如果没有启用,右边是白色。我不确定这是否在 XCode 3 中,但我希望大多数人已经升级了。

【讨论】:

以上是关于在 Xcode 中观察变量的主要内容,如果未能解决你的问题,请参考以下文章

观察更新到 xcode 10.2.1 后数据库功能不起作用

UI 测试 + postNotificationName + 永远不会到达观察者 + Xcode 7

如何在其他控制器AngularJS中观察变量

为啥可观察对象中的更新变量不会更新视图?

ngFor正在根据可观察变量的变化重新渲染内容

Angular2:观察角度之外的外部变量