Debuggen von C ++ - Programmen unter GNU / Linux

Es ist einfach so passiert, dass ich lange Zeit viel Zeit mit den Betriebssystemen der GNU / Linux-Familie verbracht habe. Der Haupttyp meiner Tätigkeit ist die Softwareentwicklung in C ++.

Das Hauptproblem bei der Verwendung des Debuggers ist daher die Anzeige komplexer Container, z. B. stl-Container.

Die von mir vorgeschlagene Lösung ist für gdb relevant. Dieser Debugger unterstützt in Python geschriebene Skripte, und die Mechanismen zum Anzeigen komplexer Objekte werden als hübsche Drucker bezeichnet. Das heißt Damit der Debugger uns alles korrekt anzeigt, müssen Sie ihm mitteilen, wo sich die Skripte mit diesen hübschen Druckern befinden. Um zusätzliche Befehle für den Debugger anzugeben, ist eine .gdbinit-Datei erforderlich.

Also werde ich versuchen, alles wie ein Handbuch zu ordnen und bequemer zu lesen, und ich werde es selbst nicht vergessen.

1. Installiere gcc, g ++, gdb, libstdc ++ - dbg , letzteres ist sehr wichtig, weil In neuen Distributionen werden mit Debugging-Zeichen Skripte mit hübschen Druckern installiert. In Ubuntu 14.04 wird beispielsweise das Verzeichnis /usr/share/gcc-4.8/python/libstdcxx angezeigt.
2. Erstellen Sie im Ausgangsverzeichnis eine .gdbinit-Datei mit folgendem Inhalt:

#
# .gdbinit : GDB Config file
#
# add python pretty printers for STL
python
import sys
sys.path.insert(0, '/usr/share/gcc-4.8/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
set auto-load local-gdbinit on
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


Alles scheint in Ordnung zu sein, aber es gibt ein Problem: In den neuesten Versionen von GNU / Linux wird gdb mit Unterstützung für Python Version 3. * erstellt, und standardmäßig ist Python Version 2. * installiert. Um dieses Problem zu beheben, d.h. Um Skripte zu erstellen, die beide Versionen von Python unterstützen, gibt es einen Patch, den Sie auf den freien Plätzen des Netzwerks finden. Änderungen vorbehalten ist /usr/share/gcc-4.8/python/libstdcxx/v6/printers.py

Und wieder scheint alles in Ordnung zu sein, aber wieder gibt es ein Problem, bei einigen Distributionen sind die Skripte mit hübschen Druckern nicht installiert. Dazu gibt es das SVN-Repository _svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python. Hier ist ein Link mit einer zusätzlichen Beschreibung: _http: //sourceware.org/gdb/wiki/STLSupport. Wenn dies der Fall ist, vergessen Sie nach dem Entladen des Repositorys nicht, den Pfad zu heruntergeladenen Skripten in die .gdbinit-Datei zu ändern.

3. Wenn Sie ein Projekt mit Debugging zusammenstellen, müssen Sie das Flag _GLIBCXX_DEBUG angeben. Dies ist notwendig, damit Container wie Stringstream korrekt angezeigt werden.

Abschließend möchte ich sagen, dass das „Tanzen“ mit hübschen Druckern (der zweite Punkt) nicht erforderlich ist, wenn Sie QtCreator als IDE verwenden Diese IDE verwendet ihre Skripte, um mit gdb zu interagieren.

Jetzt auch beliebt: