Bei Verwendung von Eclipse und CDT zum Debuggen von C ++ - Code sind die variablen Fenster umständlich und für in der Standardvorlagenbibliothek oder in boost (z. B. shared_ptr) definierte Typen nicht sehr informativ.
Nur ein Beispiel, wie dies für einen std :: vector aussehen könnte:
bar {…}
std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> > >
_M_impl {…}
std::allocator<TSample<MyTraits> > {…}
_M_start 0x00007ffff7fb5010
_M_finish 0x00007ffff7fd4410
_M_end_of_storage 0x00007ffff7fd5010
Selbst wenn diese Informationen über die Interna dieser Typen nützlich sein könnten, würde ich in fast allen Fällen eine klarere Darstellung hier erwarten, dh eine Liste von Werten für den std :: vector. Gibt es Tools, Plugins oder andere Modifikationen, mit denen dies möglich ist?
BEARBEITEN
Die folgenden Lösungen funktionieren nicht unter Linux. Ich benutze Ubuntu 14.04, Eclipse, G ++, GDB.
Ich kann kein Paket gdb-python finden und Linux verwendet kein Mingw
quelle
Error in final launch sequence Failed to execute MI command: -file-exec-and-symbols D:/Dropbox/eclipse/ProofTool/Debug/ProofTool.exe Error message from debugger back end: "D:\Dropbox\eclipse\ProofTool\Debug\ProofTool.exe": not in executable format: File format not recognized "D:\Dropbox\eclipse\ProofTool\Debug\ProofTool.exe": not in executable format: File format not recognized
zu mir, es scheint, dass dies auch ein 64/32-Bit-Problem ist. Ich bin unter Windows 7 64-Bit und möchte 64-Bit-Programme debuggen. Nur 32-Bit-Python funktioniert, wie @truthseeker erwähntNun, GDB unterstützt STL-Container nicht von Haus aus. Sie können nicht sagen, dass dies falsch ist, da dadurch das Innenleben der STL-Objekte sichtbar wird, aber meistens ist es nicht das, was wir wollen, oder?
Wenn Sie gdb 7.0 verwenden, können Sie die hübschen Drucker nutzen. Diese Website http://sourceware.org/gdb/wiki/STLSupport enthält ein ziemlich einfaches Tutorial zum Einstellen. Ich habe unten den Teil kopiert, der Sie interessiert:
Da Sie eclipse cdt verwenden, vergessen Sie nicht, Ihre Debug-Konfiguration auf Ihre .gdbinit-Datei zu verweisen. Wechseln Sie beim Erstellen einer neuen Debug-Konfiguration zur Registerkarte Debugger und geben Sie den Pfad zur .gdbinit-Datei in das Feld "GDB-Befehlsdatei" ein.
Ich hoffe das hilft!
quelle
from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers(gdb.current_objfile())
behoben , dass die Zeilen in der Datei libstdcxx / v6 / __ init__.py auskommentiert wurden.Erweitern Sie in der Debug-Ansicht in der Variablenliste den Vektor:
"vector_name"
->std::_Vector_base<"datatype">
->_M_impl
Klicken Sie dann mit der rechten Maustaste auf
_M_start
und wählen Sie "Als Array anzeigen ...", geben Sie die Länge ein und klicken Sie dann auf OK. Jetzt können Sie jedes Element Ihres Vektors erweitern.quelle
_M_start
nachdem Sie "Als Array anzeigen ..." durchlaufen haben.vector<T>
da ein Typelement zugrunde liegtT[]
. Bei anderen STL-Typen funktioniert dies nicht. Dies ist eine gute und einfache Lösung für Vektoren und Zeichenfolgen.Wenn Sie
gdb
Unterstützung fürCDT
(siehe z. B. GDB in Eclipse ) haben, können Sie Folgendes versuchen: De-Referenzierung von STL-ContainernVor langer Zeit bin ich auch auf dasselbe Problem gestoßen. Es war mühsam, die STL-Behälter zu überprüfen. Dann fand ich diesen Link und fügte meiner
.gdbinit
Datei einige dieser Definitionen hinzu. Danach war das Leben einfacher.HINWEIS: Meine
gdb
Version ist 7.1 und das Hinzufügen dieser Definitionen funktioniert einwandfrei. Ich weiß nicht, ob sie in neueren Versionengdb
bereits enthalten sind.quelle
Ich möchte die Windows 7-Antwort erweitern, da einige wichtige Schritte weggelassen werden:
Dies ist für MinGW-Benutzer mit Eclipse CDT
0) Wenn Sie keine Python-GDB haben, öffnen Sie eine Shell / einen Befehl und verwenden Sie MinGW-get.exe, um die Python-fähige GDB zu installieren, z
1a) Holen Sie sich Python 2.7.x von http://python.org/download/ und installieren Sie es
1b) Stellen Sie sicher, dass PYTHONPATH und PYTHONHOME in Ihrer Umgebung eingestellt sind:
PYTHONPATH should be C:\Python27\Lib (or similar) PYTHONHOME should be C:\Python27
1c) Fügen Sie Ihrem Pfad PYTHONHOME hinzu
2a) Öffnen Sie eine Texteingabe und geben Sie die folgenden Anweisungen ein. Beachten Sie, dass die dritte Zeile zeigt, wo sich die Python-Skripte befinden. Siehe dazu die folgenden Hinweise!
python import sys sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end
2b) Speichern unter '.gdbinit' HINWEIS: Im Windows Explorer können Sie keine Datei benennen, die mit einem Punkt aus dem Explorer beginnt. Bei den meisten Textänderungen (einschließlich Editor) können Sie. GDB-Init-Dateien sind wie 'Skripte' von GDB-Befehlen, die GBD beim Laden ausführt.
2c) Die '.gdbinit'-Datei muss sich im Arbeitsverzeichnis von GDB befinden (höchstwahrscheinlich ist dies das Stammverzeichnis Ihres Projekts, aber Ihre IDE kann es Ihnen mitteilen.
3) Öffnen Sie das Dialogfeld "Eclipse (oder andere IDE) -Einstellungen". Gehen Sie zum Untermenü C ++ Debugger.
4) Konfigurieren Sie Eclipse
C:\MinGW\bin\gdb-python27.exe
als Debugger und Ihre.gdbinit
als Konfigurationsdatei.5a) Erstellen Sie alle Ihre Debug-Startkonfigurationen neu (löschen Sie die alte und erstellen Sie eine neue von Grund auf neu).
5b) Bearbeiten Sie jede Debug-Konfiguration und verweisen Sie auf die neue Datei gdb-python.exe UND auf die neue.
Wenn Sie auf Probleme stoßen:
- Vergessen Sie nicht, den Speicherort im obigen Python-Code in das Python-Verzeichnis zu ändern! Dieses Verzeichnis wurde von MinGW erstellt. Versuchen Sie also nicht, die hübschen Drucker herunterzuladen. MinGW hat dies in Schritt Null für Sie erledigt. Gehen Sie einfach zu Ihrem MinGW-Installationsdirektor, dem Freigabeordner, dem GCC-Ordner (mit der Versionsnummer) und Sie finden den Python-Ordner. Dieser Speicherort sollte in einem von GDB geladenen Python-Skript enthalten sein.
--Auch die .gdbinit ist eine PITA, stellen Sie sicher, dass sie korrekt benannt ist und sich im Arbeitsordner von GDB befindet, in dem sich nicht unbedingt gdb-python.exe befindet! Überprüfen Sie Ihre GDB-Ausgabe beim Laden von GDB, um festzustellen, ob a) "Python-fähig" während des Ladens angezeigt wird und ob die Anweisungen in der .gdbinit angezeigt werden.
- Schließlich hatte ich viele Probleme mit den Systemvariablen. Wenn Python Ihnen 'ImportError' gibt, haben Sie höchstwahrscheinlich weder PYTHONPATH noch PYTHONHOME festgelegt.
- Das Verzeichnis mit 'gdb-python27' (z. B. C: \ MinGW \ bin ') sollte sich ebenfalls auf Ihrem Pfad befinden. Wenn dies der Fall ist, wird das Einrichten von Eclipse etwas einfacher, da Sie keine absoluten Pfade eingeben müssen . Trotzdem benötigt die .gbdinit manchmal einen absoulten Pfad. Wenn es funktioniert, wird beim Start des Debuggers eine Ausgabe von gbd (Konsole-> gdb-Traces) wie folgt angezeigt:
835,059 4^done 835,059 (gdb) 835,059 5-enable-pretty-printing 835,069 5^done .... 835,129 12^done 835,129 (gdb) 835,129 13source C:\MinGW\bin\.gdbinit 835,139 &"source C:\\MinGW\\bin\\.gdbinit\n" 835,142 13^done 835,142 (gdb)
quelle
Ich weiß, dass JDT (Java-Umgebung in Eclipse) benutzerdefinierte "Formatierer" bereitstellt, die beim Anzeigen von Variablenwerten in Debug-Ansichten angewendet werden können. Ein kurzer Blick auf Google für das gleiche in CDT bringt diese Seite:
http://wiki.eclipse.org/CDT/Better_Debugging_%28GSoC_project%29
Ich weiß nicht, ob dies noch in die Haupt-CDT-Zeile integriert wurde. Möglicherweise können Sie versuchen, beim Debuggen (in der letzten CDT) mit der rechten Maustaste auf eine Variable zu klicken, um festzustellen, ob ein benutzerdefinierter Formatierungseintrag vorhanden ist. Wenn nicht verfügbar, empfehle ich Ihnen, einen neuen Tracker-Eintrag im CDT-Tracker hinzuzufügen, um diese Verbesserung anzufordern.
quelle