2010-06-06 17 views
7

Al depurar un proyecto C++ no administrado en Visual Studio 2008, ocasionalmente quiero ver el valor de una variable global. No tenemos muchos de estos, pero los que están allí declarados dentro de un espacio de nombres llamado 'global'. p.ej.Visualización de variables globales con espacios de nombres en el depurador de Visual Studio?

namespace global 
{ 
    int foo; 
    bool bar; 

    ... 
} 

El problema es que cuando el código se detiene en un punto de interrupción, la información sobre herramientas de depuración por defecto (de señalando el nombre de la variable) y la Inspección rápida (Shift-F9 en el nombre de variable) no se toman en el espacio de nombres consideración y por lo tanto no funcionará.

Así que, por ejemplo, puedo señalar 'foo' y no aparece nada. Si cambio-f9 en foo, aparecerá el reloj rápido, que dice 'CXX0017: Error: el símbolo' foo 'no encontrado'. Puedo solucionarlo editando manualmente el nombre de la variable en la ventana de QuickWatch para prefijarlo con "global ::" (que es engorroso teniendo en cuenta que tiene que hacerlo cada vez que quiera un reloj rápido), pero no hay ninguna solución para la información sobre herramientas que puedo entrenar Establecer el 'espacio de nombre predeterminado' de las propiedades del proyecto no ayuda.

Cómo puedo decirle al depurador VS que use el espacio de nombres que ya sabe que la variable está declarada (ya que tiene la declaración allí), o, alternativamente, dígale un espacio de nombres predeterminado para buscar variables en si no los encuentra?

Mi google-fu no ha podido encontrar una respuesta. This report enumera el mismo problema, con MS diciendo que es "por diseño", pero aun así espero que haya alguna forma de evitarlo (quizás con un uso inteligente de autoexp.dat?)

+1

tienes suerte de que su espacio de nombres tiene un nombre. Si las variables están en un espacio de nombres sin nombre, es incluso imposible ver su valor en el depurador (ver http://stackoverflow.com/questions/1334989/debugging-data-in-anynomous-namespaces-c). – Patrick

Respuesta

1

Usando el nombre completo incluyendo el espacio de nombres en la fuente lo resolvió para mí.

ej .: escribir

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

en lugar de

bar = (foo==0) 
Cuestiones relacionadas