2010-06-06 13 views
7

Beim Debuggen eines nicht verwalteten C++ - Projekts in Visual Studio 2008 möchte ich gelegentlich den Wert einer globalen Variablen sehen. Wir haben nicht viele davon, aber diejenigen, die es gibt, sind alle in einem Namespace namens 'global' deklariert. z.B.Namespace-globale Variablen in Visual Studio-Debugger anzeigen?

namespace global 
{ 
    int foo; 
    bool bar; 

    ... 
} 

Das Problem ist, dass, wenn der Code an einem Breakpoint gestoppt wird, Tooltip Standarddebugging (von an den Variablennamen zeigen) und Schnellüberwachung (Shift-F9 auf dem Variablennamen) nehmen Sie nicht den Namespace in Rücksicht und folglich wird nicht arbeiten.

Also zum Beispiel kann ich auf "foo" zeigen und nichts kommt auf. Wenn ich f9 auf foo umschalte, wird die Quickwatch angezeigt, die dann lautet: 'CXX0017: Fehler: Symbol "foo" nicht gefunden'. Ich kann das umgehen, indem ich den Variablennamen im Quickwatch-Fenster manuell bearbeite, um ihn mit "global ::" zu versehen (was umständlich ist, wenn man es jedes Mal machen muss, wenn man Quickwatch machen will), aber es gibt keinen Fix für den Tooltip dass ich trainieren kann. Das Festlegen des 'Standardnamespace' der Projekteigenschaften hilft nicht. Wie kann ich dem VS-Debugger mitteilen, dass er den Namespace verwenden soll, von dem er bereits weiß, dass die Variable deklariert ist (da er die Deklaration hat), oder er kann alternativ einen Default-Namespace angeben, um nach Variablen in if zu suchen findet sie nicht?

Mein google-fu hat keine Antwort gefunden. This report listet das gleiche Problem, mit MS sagen, es ist "von Design", aber auch ich hoffe, es gibt einen Weg, um es zu umgehen (vielleicht mit cleveren Einsatz von autoexp.dat?)

+1

Sie haben Glück, dass Ihr Namespace einen Namen hat. Wenn sich die Variablen in einem unbenannten Namespace befinden, ist es sogar unmöglich, ihren Wert im Debugger zu sehen (siehe http://stackoverflow.com/questions/1334989/debugging-data-in-anynomous-namespaces-c). – Patrick

Antwort

1

Verwenden Sie den vollständigen Namen einschließlich der Namensraum in der Quelle löste es für mich.

z.B .: schreiben

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

statt

bar = (foo==0) 
Verwandte Themen