在 Visual Studio 调试器中查看命名空间的全局变量?

Posted

技术标签:

【中文标题】在 Visual Studio 调试器中查看命名空间的全局变量?【英文标题】:Viewing namespaced global variables in Visual Studio debugger? 【发布时间】:2011-02-28 07:48:39 【问题描述】:

在 Visual Studio 2008 中调试非托管 C++ 项目时,我偶尔想查看全局变量的值。我们没有很多这些,但那些都在名为“全局”的命名空间中声明。例如

namespace global

  int foo;
  bool bar;

  ...

问题在于,当代码在断点处停止时,默认的调试工具提示(从指向变量名)和 quickwatch(在变量名上按 shift-f9)没有考虑命名空间,因此赢了不行。

例如,我可以指向“foo”,但什么也没有出现。如果我在 foo 上按 shift-f9,它会调出 quickwatch,然后显示 'CXX0017: Error: symbol "foo" not found'。我可以通过在 quickwatch 窗口中手动编辑变量名称来解决这个问题,并在其前面加上“global::”(考虑到每次想要快速观察时都必须这样做,这很麻烦),但工具提示没有修复我可以解决。设置项目属性的“默认命名空间”没有帮助。

我如何告诉 VS 调试器使用它已经知道在其中声明了变量的命名空间(因为它在那里有声明),或者,如果没有,告诉它一个默认命名空间来查找变量没找到?

我的 google-fu 找不到答案。 This report 列出了同样的问题,MS 说这是“设计使然”,但即便如此,我还是希望有一些方法可以解决它(也许巧妙地使用 autoexp.dat?)

【问题讨论】:

你很幸运你的命名空间有一个名字。如果变量位于未命名的命名空间中,甚至无法在调试器中看到它们的值(请参阅***.com/questions/1334989/…)。 【参考方案1】:

在源代码中使用包含命名空间的全名为我解决了这个问题。

例如:写

global::bar = (global::foo==0)

而不是

bar = (foo==0)

【讨论】:

【参考方案2】:

如果符号位于不同的 DLL 中,您可以在 Watch 窗口中使用以下语法:

,,<dllname><fully qualified symbol name>

e。 G。

,,foobar64d.dllglobal::foo

请参阅https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp?view=vs-2017 或搜索“Visual Studio 上下文运算符”。

【讨论】:

谢谢!您链接的 MS 文档中的替代语法可能更可取,例如: foobar64d.dll!global::foo

以上是关于在 Visual Studio 调试器中查看命名空间的全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2010怎么用

如何在 MS Visual Studio 调试器中查看 DOMString(来自 apache xerces 库)?

在 Visual Studio 2015 调试器中查看 Qt5.6 QStrings

如何在 Visual Studio 调试器中查看属性的整个值?

Visual Studio 调试器:轻松查看 std::list(和其他 std 容器)

在 Visual Studio 中重命名某些内容时,如何查看“无法解决的冲突”是啥?