【问题标题】:Viewing namespaced global variables in Visual Studio debugger?在 Visual Studio 调试器中查看命名空间的全局变量?
【发布时间】: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?)

【问题讨论】:

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

标签: visual-studio debugging namespaces global-variables


【解决方案1】:

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

例如:写

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

而不是

bar = (foo==0)

【讨论】:

    【解决方案2】:

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

    {,,<dllname>}<fully qualified symbol name>
    

    e。 G。

    {,,foobar64d.dll}global::foo
    

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

    【讨论】:

    • 谢谢!您链接的 MS 文档中的替代语法可能更可取,例如: foobar64d.dll!global::foo
    猜你喜欢
    • 2019-01-24
    • 2012-03-13
    • 1970-01-01
    • 2011-03-25
    • 2021-02-24
    • 2011-08-31
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多