在Visual Studio 2008中调试非托管C ++项目时,我偶尔会想看到全局变量的值。我们没有很多这些,但那些都在名为'global'的名称空间中声明。 e.g。
namespace global
{
int foo;
bool bar;
...
}
问题是当代码在断点处停止时,默认调试工具提示(从指向变量名称)和quickwatch(变量名称上的shift-f9)不考虑名称空间,因此赢了不行。
所以例如我可以指向'foo'并且没有任何结果。如果我在foo上移动-f9,它会调出快速表,然后说'CXX0017:错误:符号“foo”未找到'。我可以通过在快速监视窗口中手动编辑变量名称来解决这个问题,并在其前面添加“global ::”(考虑到每次想要快速观察时都必须这样做,这很麻烦),但是没有修复工具提示我可以解决。设置项目属性的“默认命名空间”没有帮助。
我如何告诉VS调试器使用它已经知道变量被声明的命名空间(因为它在那里有声明),或者,如果它没有,则告诉它一个默认命名空间来查找变量找不到他们?
我的google-fu未能找到答案。 This report列出了同样的问题,MS称其为“按设计”,但即使如此,我希望有一些方法可以解决它(也许巧妙地使用autoexp.dat?)
答案 0 :(得分:1)
在源代码中使用包含命名空间的全名解决了它。
例如:写
global::bar = (global::foo==0)
而不是
bar = (foo==0)
答案 1 :(得分:1)
如果符号位于另一个DLL中,则可以在“监视”窗口中使用以下语法:
cleaned_data
e。 G。
{,,<dllname>}<fully qualified symbol name>
请参见https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp?view=vs-2017或搜索“ Visual Studio上下文运算符”。