• START
  • SOFTWARE
  • OPENSOURCE
  • BILDER-GALERIE
  • KONTAKT
  • INDEX


GNU gdb (Debugger), MinGW, Eclipse und wxWidgets

Februar 26, 2012 Veröffentlicht von Andreas Wittmann unter Entwicklung

Debuggen unter Eclipse (C++/CDT) ist eine feine Sache sofern man es mit einfachen Datentypen wie Long, Char* usw. zu tun hat. Komplexere Datenstrukturen wie zB. ein wxString von wxWidgets spucken allerdings nur in sehr mühsamer Weise wertvolle Informationen aus. Zwar kann man sich über Expressions (wxString::ToAscii().m_str) ein wenig “retten” doch ein effizientes Debuggen ist damit nicht möglich.

Abhilfe schafft hier der PrettyPrint Modus von GDB. Anhand dieser Funktionen können Variablen in der unterschiedlichsten Art und Weise dargestellt werden. Kleiner Nachteil: Der GNU Debugger gdb muss Python-Scripts ausführen können (gdb-python27.exe) und Python selbst soll natürlich auch installiert sein. Mehr ist allerdings dann nicht mehr notwendig.

Idealerweise erstellt man ein gdbinit-File welches ungefähr folgenden Inhalt hat:

set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off
source c:\dev\python\wxwidgets.gdb

Entscheidend ist hier allerdings nur die letzte Zeile welche eine Datei namens wxwidgets.gdb einbindet. Diese Datei hier downloaden und im Dateisystem ablegen (Die source Direktive dem Pfad entsprechend anpassen!) Den Code von wxwidgets.gdb habe ich größtenteils aus dem Internet, allerdings ein wenig modifiziert damit er auch direkt mittels source von GDB aufgerufen werden kann.

In Eclipse stellt man in den Debugging Settings nun noch einen Verweise auf die gerade erstellte gdbinit ein und – Fertig! Schon kann ein wxString direkt in der Debugging-View sichtbar gemacht werden.

Zeiger werden allerdings keine berücksichtigt und so wird anstatt eines dereferenzierten wxString* lediglich die Speicheradresse angezeigt. Deshalb gibt es von wxwidgets.gdb eine zweite Version welche auch den Inhalt eines wxString* berücksichtigt. Nachdem ich kein Python-Profi bin ist es möglich das dieser Code eventuell nicht optimal ist, jedenfalls funktioniert er bei mir wunderbar.

Hier kann diese erweiterte Version heruntergeladen werden: wxwidgets1.gdb (mit Pointer)

Weiterführende links:
http://forums.codeblocks.org/index.php/topic,12747.0.html
http://svn.wxwidgets.org/viewvc/wx/wxWidgets/trunk/misc/gdb/print.py
http://forums.codeblocks.org/index.php/topic,15050.msg101768.html

6 Antworten zu GNU gdb (Debugger), MinGW, Eclipse und wxWidgets

  1. Andreas WittmannMai 8, 2012 um 21:02

    Am besten direkt von der MinGW-Seite downloaden.

    http://sourceforge.net/projects/mingw/files/MinGW/Extension/gdb/GDB-7.4/

    Die Datei nennt sich gdb-python-7.4-2-mingw32-bin.tar.lzma

    Die darin befindlichen Dateien nach c:\mingw32\bin kopieren (je nachdem wo mingw installiert ist)

    Hoffe das hilft ;-)

    P.S.: Bei tdm-gcc dürfte gdb-python automatisch dabei sein. Habe aber gerade keine Möglichkeit dies zu testen.

    Antworten
  2. AnhMai 8, 2012 um 18:36

    Hallo,

    wie kann ich die Datei gdb-python27.exe finden. Leider kann ich es nicht in MinGW Folder sehen.

    danke vielmals

    Antworten
  3. Franz HuttererApril 30, 2012 um 12:58

    gdb-7.4 verwenden. Hier wurde der Bug behoben!

    Antworten
  4. Franz HuttererApril 30, 2012 um 11:27

    Der Fehler tritt bei lokalen, nicht initialisierten Variablen auf! Scheinbar ist das ein Bug von gdb, keine Ahnung welche Workarounds es dafür gibt :-(

    Antworten
  5. Franz HuttererApril 30, 2012 um 10:53

    Scheinbar wird hier (to_string) eine Exception geworfen und sobald man diese abfängt crasht gdb-python27.exe auch nicht mehr. Sollte man in wxwidgets.gdb berücksichtigen. tmp ist wichtig da man sonst dennoch gdb zum Abstürzen bringt!

    def to_string(self):
    try:
    tmp = self.val['m_pchData'].string()
    return tmp
    except:
    return “FAILURE”

    Antworten
  6. Franz HuttererApril 30, 2012 um 10:24

    Funktioniert einwandfrei. gdb-python27.exe crasht sobald ich wxWidgets-Applikationen debugge wo noch keinerlei wxString initialisiert wurde. Deshalb ist es ratsam Breakpoints zu setzen nachdem ein wxString deklariert wurde.

    Antworten

Hinterlasse eine Antwort Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

*


sieben + sechs =

« IOSpeed – Messen von Festplattengeschwindigkeiten
UML Diagramme mit OpenSource »
Spiele Elektronik Linux Allgemein Bugfix Software Entwicklung
Spiele Wordpress Elektronik SDL_Mixer Videos DirectX Minesweeper NextGen Gallery ATMega8 Sound SDL Dokumentationen AVR
Archive
  • Mai 2013 (1)
  • Februar 2013 (1)
  • Dezember 2012 (2)
  • Juli 2012 (1)
  • Mai 2012 (1)
  • Februar 2012 (3)
  • Dezember 2011 (3)
  • November 2011 (2)
WittNet powered by WordPress and The Clear Line Theme - Sitemap - Impressum