Просмотр глобальных переменных пространства имен в отладчике Visual Studio? - PullRequest
8 голосов
/ 06 июня 2010

При отладке неуправляемого проекта C ++ в Visual Studio 2008 я иногда хочу увидеть значение глобальной переменной. У нас их не так много, но все они объявлены в пространстве имен, называемом «глобальным». например,

namespace global
{
  int foo;
  bool bar;

  ...
}

Проблема в том, что когда код останавливается в точке останова, всплывающая подсказка по умолчанию для отладки (от указания на имя переменной) и быстрый просмотр (shift-f9 для имени переменной) не учитывают пространство имен и, следовательно, выигрывают не работает.

Так, например, я могу указать на 'foo', и ничего не появляется. Если я переключу -f9 на foo, он вызовет быстрые часы, которые затем сообщают 'CXX0017: Ошибка: символ "foo" не найден ". Я могу обойти это, вручную отредактировав имя переменной в окне быстрого просмотра, добавив к нему префикс «global ::» (что обременительно, учитывая, что вы должны делать это каждый раз, когда вы хотите быстрый просмотр), но для всплывающей подсказки нет исправления что я могу работать Установка «пространства имен по умолчанию» для свойств проекта не помогает.

Как я могу сказать отладчику VS использовать пространство имен, в котором он уже знает, что переменная объявлена ​​(так как оно имеет объявление прямо там), или, альтернативно, сказать ему пространство имен по умолчанию, чтобы искать переменные, если это не так? не можете их найти?

Мой гугл-фу не смог найти ответ. В этом отчете перечислена та же проблема: MS заявляет, что это "по замыслу", но, несмотря на это, я надеюсь, что есть какой-то способ обойти это (возможно, с умным использованием autoexp.dat?)

Ответы [ 2 ]

1 голос
/ 28 августа 2018

Если символ находится в другой DLL, вы можете использовать следующий синтаксис в окне Watch:

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

е. г.

{,,foobar64d.dll}global::foo

См. https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp?view=vs-2017 или выполните поиск по запросу «оператор контекста visual studio».

1 голос
/ 16 марта 2016

Использование полного имени, включая пространство имен в источнике, решило это для меня.

например: написать

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

вместо

bar = (foo==0)
...