Frage

Windbg Fans behaupten, dass es sehr mächtig ist und ich eher zustimmen. Aber wenn es um das Debuggen STL-Container kommt, ich bin immer wieder fest. Wenn die Variable auf dem Stapel ist, manchmal die !stl Verlängerung Zahlen Sie es aus, aber wenn ein Behälter mit einem komplexen Typ (zB std::vector<TemplateField, std::allocator<TemplateField> >) auf dem Heap oder Teil einer anderen Struktur ist, ich weiß nur nicht, wie dessen Inhalt anzuzeigen .

Appreciate

irgendwelche Tipps, Zeiger.

Andere Tipps

ich oft Debugger Unterstützung für STL-Datentypen unzureichend finden. Aus diesem Grund verwende ich zunehmend Logging Frameworks und Protokollierung Aussagen . Früher dachte ich, dass diese für Leute, die nicht einen Debugger verwenden können, aber ich weiß jetzt, dass sie einen echten Mehrwert bieten. Sie ermöglichen es, tragbare Debugging Wissen in Ihrem Code einbetten und halten es zusammen mit dem Code. Im Gegensatz dazu arbeiten Sie tun in dem Debugger typischerweise kurzlebig ist.

Python-Erweiterung für WinDbg (pykd) Schnipsel haben stlp.py die Karteninhalte abladen kann.
Derzeit unterstützt es STLPort Karte Implementierung. Getestet auf x86 und x64. Diese Artikel zeigt, wie es zu benutzen (sein auf Russisch , aber Beispiele sind selbsterklärend).

Ich hatte genau die gleiche Frage vor einiger Zeit. Meine Antwort ist, dass Visual Studio ist wirklich ein besseres Debugger für STL und komplexen Typen (wie Visual Studio ist nur eine einfache besser Debugger als MDbg).

Dies ist nicht zu sagen WinDBG weniger leistungsfähig ist, nur, dass es niedrige Ebene (zum Beispiel versuchen, etwas Sinnvolle mit Crash-Dumps zu tun Visual Studio - Sie kann nicht).

Wie auch immer, Ihre Frage zu beantworten, können Sie Visual Studio verwenden, um die Datentypen zu suchen einige Tricks:

  1. Starten Sie eine andere Instanz von WinDBG, bringen nicht-invasiv: cdb -p <PID> -pv. Dadurch werden die Fäden des debugee suspendieren. Jetzt können Sie sicher die ursprüngliche WinDBG qd lösen
  2. Schließen Sie Visual Studio, und dann die nicht-invasiven WinDBG qd lösen. Schauen Sie sich die STL und weiter, wie Sie wollen.
  3. Wenn Sie zurück zu WinDBG, gehe zu Schritt 1, Swap mit einem invasiven WinDBG gehen müssen.

ich am Ende in der Regel eine toString() Methode in vielen meine Klassen kleben. Dies zeigt alle Informationen, die ich für wichtig halten, können alle Behälter dann nennen dies die Klasseninformation in der Konsole angezeigt werden

Verwenden dt -r das heißt dt yourapp! Klasse 7ffdf000 -R 5

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top