在 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 调试器中查看命名空间的全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MS Visual Studio 调试器中查看 DOMString(来自 apache xerces 库)?
在 Visual Studio 2015 调试器中查看 Qt5.6 QStrings
如何在 Visual Studio 调试器中查看属性的整个值?