Wenn CDT verwendet wird, möchte ich std :: string im Debug-Fenster 'Variable' mit der enthaltenen Zeichenfolge anzeigen lassen. Wenn es zum Beispiel das Wort "history" enthält, möchte ich history im Debugger-Fenster mit der Bezeichnung "variables" sehen.
Ich denke, es gibt einen allgemeinen Weg, um einen Drilldown in Objekte durchführen zu lassen, aber ich kann meinen Finger nicht darauf legen. Weiß jemand da draußen, wie man das macht?
Dies wäre auch nützlich, wenn ich nur ein einzelnes Feld aus einem komplexen Objekt ausgeben möchte.
Danke, Rechnung
Beachten Sie, dass Sie nicht eine allgemeine Methode zum Drilldown in Objekte wünschen; Sie möchten STL-Container hübsch drucken.
Ich denke CDT delegiert dies an das Debugger-Backend; d. h. es liegt an Ihrem Debugger (gdb, vielleicht?), CDT über den Wert einer Variablen zu informieren und wie sie erweitert werden kann.
Edit: Ich glaube nicht, dass das mit CDT ausgelieferte GDB-Backend eine "intelligente" Anzeige von STL-Containern unterstützt. Wenn Sie wirklich daran interessiert sind, schlage ich vor, dass Sie das CDT-Entwicklerteam unter [email protected] kontaktieren.
Aktualisieren / Bearbeiten: Bitte lesen Sie die anderen Antworten unten, um Anweisungen zum Aktivieren hübscher Drucker in CDT zu erhalten.
Auch die Anzeige von stl-Containern mit eclipse / gdb war für mich schon lange ein großer Schmerz.
Aber jetzt habe ich gerade entdeckt, dass die neueste Version von gdb mit aktiviertem Python dabei helfen kann.
Es folgt, was ich getan habe (Ubuntu Linux 8.10):
Erstellen Sie eine Datei namens .gdbinit in Ihrem Projektstamm mit dem folgenden Inhalt:
python-Import gdb.libstdcxx.v6.printers
Nun werden die STL-Container hübsch gedruckt .
Wenn Sie überprüfen möchten, ob Sie bereits eine Python-fähige gdb haben (oder ob Ihre neue Installation funktioniert hat):
Führe in der gdb-Eingabeaufforderung Folgendes aus:
(gdb) python print 'Python aktiviert GDB funktioniert!'
Wenn der obige Befehl das erzeugt, was wir erwarten, funktioniert es.
Weitere Details finden Sie in diesem Blog .
Windows 7
Holen Sie sich die hübschen Drucker:
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
Einrichten der Sonnenfinsternis mit: C / C ++ Debug Gdb:
%Vor%Ich möchte die Windows 7-Antwort erweitern, da einige wichtige Schritte weggelassen wurden:
0) Wenn Sie keine Python-GDB haben, öffnen Sie eine Shell / einen Befehl und verwenden Sie MinGW-get.exe, um 'installieren' Python-aktivierte GDB z.B.
%Vor%1a) Laden Sie Python 2.7.x von Ссылка herunter und installieren Sie
1b) Stellen Sie sicher, dass PYTHONPATH und PYTHONHOME in Ihrer Umgebung festgelegt sind:
%Vor%1c) Füge PYTHONHOME zu deinem PFAD hinzu
%Vor%2a) Öffnen Sie eine Texteingabe, geben Sie die folgenden Anweisungen ein. Beachten Sie, dass die 3. Zeile ist Zeigt auf wo sich die Python-Skripte befinden. Siehe die folgenden Hinweise dazu!
%Vor%2b) Speichern Sie als '.gdbinit' HINWEIS: Windows Explorer lässt Sie keine Datei benennen, die mit beginnt mit einer Periode vom Entdecker. Die meisten Textänderungen (einschließlich Notepad) lassen 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 (wahrscheinlich ist dies der Fall) Ihr Projekt-Stammverzeichnis, aber Ihre IDE kann es Ihnen sagen.
3) Öffnen Sie Ihren Eclipse (oder andere IDE) Einstellungen Dialog. Wechseln Sie zum C ++ Debugger-Untermenü.
4) Konfigurieren Sie Eclipse, um C:\MinGW\bin\gdb-python27.exe
als Debugger und .gdbinit
als Konfigurationsdatei zu verwenden.
5a) Erstellen Sie alle Ihre Debug-Startkonfigurationen neu (löschen Sie die alte und erstellen Sie eine neue von Grund auf).
%Vor%5b) Bearbeiten Sie jede Debug-Konfiguration und zeigen Sie sie auf die neue gdb-python.exe und zeigen Sie sie auf die.
- Vergessen Sie nicht, den Speicherort im obigen Python-Code in das Python-Verzeichnis zu ändern! Dieses Verzeichnis wird von MinGW erstellt, also gehen Sie nicht zum Herunterladen der hübschen Drucker MinGW habe es für dich in Schritt Null getan. Gehe einfach zu deinem MinGW-Installationsdirektor, dem Share-Ordner, Der GCC-Ordner (hat die Versionsnummer) und Sie finden den Python-Ordner. Dieser Ort ist was sollte in Python-Skript von GDB geladen werden.
- Auch die .gdbinit ist eine PITA, stellen Sie sicher, dass sie richtig benannt ist und im Arbeitsordner von GDB Das ist nicht unbedingt, wo gdb-python.exe befindet! Sehen Sie sich Ihre GDB-Ausgabe an, wenn Sie GDB laden, um zu sehen, ob a) 'python-enabled' während des Ladens erscheint und die Anweisungen in der .gdbinit erscheinen.
- Schließlich hatte ich eine Menge Probleme mit den Systemvariablen. Wenn Python Ihnen 'ImportError' gibt, dann haben Sie wahrscheinlich PYTHONPATH oder PYTHONHOME nicht gesetzt.
- Das Verzeichnis mit 'gdb-python27' (z. B. C: \ MinGW \ bin ') sollte ebenfalls auf Ihrem Pfad liegen. Wenn dies der Fall ist, können Sie Eclipse etwas aufbessern, weil Sie es nicht einfügen müssen in absoluten Pfaden. Aber manchmal braucht die .gbdinit einen absoluten Pfad. Wenn es funktioniert, sehen Sie die Ausgabe von gbd (console- & gt; gdb traces) so beim Start des Debuggers:
%Vor%Der einzige Weg, den ich gefunden habe, ist die Verwendung der GDB-Befehlszeile:
up
, um zu dem gewünschten Stapelrahmen zu gelangen Verwenden Sie im Fenster Konsole erneut den Befehl print
, um den Befehl anzuzeigen
std::string
Variable:
p mystring
Aber das ist eine Menge Ärger.
Etwas, das ich bemerkt habe, ist, dass wenn ich über die Variable schwinge, die Felder von std :: string tatsächlich angezeigt werden, aber es ist abgeschnitten, so dass ich nicht den interessantesten Teil sehe: den string-Wert. Vielleicht gibt es eine Möglichkeit, die maximale Länge des angezeigten Wertes zu erhöhen.
billcoke Ihr bestes Beispiel ist die Verwendung einiger gdb-Makros, die Sie in der gdb-Konsole eingeben können, die im Console / Debugger-Fenster in eclipse geöffnet werden kann. Sie können sie hier finden: Ссылка
es wird nicht automatisch auf Hover, aber Sie müssen tippen, die ermüdend ist .... aber sogar im Jahr 2009 die Eclipse CDT ist nicht gelungen, uns einige nette Debugging-Funktionen zu bringen, so ist dies Ihre beste Aufnahme.
NACH RPSENG: Danke für den Tipp rpseng! es funktioniert gut! Leider scheint meine Sonnenfinsternis (Ganymede) so verwirrt zu sein, dass sie nicht mehr den Typ von Zeigern auf Instanzen meiner eigenen Klassen und deren Vererbung entdecken wird, so dass das Durchlaufen von Membervariablen dieser Zeiger nicht mehr möglich ist. Arbeiten Sie mit CDT 6.0 und funktioniert es dort besser?
Tags und Links eclipse-cdt debugging