2017-08-22 3 views
3

Ich möchte eine ausführbare Datei mit Bazel debuggen. Der gdb-Debugger ist mit den von Bazel generierten Links verloren gegangen und kann mir den C++ - Quellcode nicht anzeigen. Wie behebt man das?C++ - Debugging mit Gdb & Bazel (& Emacs)

Das Projektwurzelverzeichnis ist /home/.../Cpp/

./Cpp/ 
├── bazel-bin -> /home/picaud/.cache/bazel/_bazel_picaud... 
├── bazel-Cpp -> /home/picaud/.cache/bazel/_bazel_picaud... 
├── bazel-genfiles -> /home/picaud/.cache/bazel/_bazel_picaud... 
├── bazel-out -> /home/picaud/.cache/bazel/_bazel_picaud... 
├── bin 
│   ├── BUILD 
│   └── main.cpp 
├── MyLib 
│   ├── BUILD 
│   ├── ....hpp 
│   ├── ...cpp 
└── WORKSPACE 
+0

bezüglich Debugging/Testing Ich habe auch eine Frage/Antwort über Bazel + Gtest geschrieben: https://stackoverflow.com/questions/45814669/c-project-with-bazel-and-gtest –

Antwort

7

Der erste Schritt ist ausführbaren Dateien zu erzeugen, den Debug-Modus unter Verwendung von:

bazel build ... --compilation_mode=dbg -s 

(die -s Option ist nicht zwingend es zeigt nur die ausgeführten Befehle, Sie können es entfernen, wenn Sie wollen)

GDB-Debugging über die Befehlszeile:

Sie können gdb mit diesem Befehl (aus dem Projekt-Stammverzeichnis) starten:

gdbtui bazel-bin/bin/main 

-> alles in Ordnung ist, sollten Sie Siehe Ihren C++ - Quellcode.

Der Fehler zu tun wäre:

cd bazel-bin/bin/ 
gdbtui main 

In diesem Fall wegen der Links ist gdb nicht in der Lage, den Quellcode abzurufen.

GDB-Debugging von Emacs:

Do as usual

M-x gdb 

In der Emacs prompt den kompletten absoluten Pfad die ausführbaren Datei definieren:

gdb -i=mi /home/picaud/.../Cpp/bazel-bin/bin/main 

Jetzt im gdb Puffer Sie müssen gdb sagen, wo die Quelle zu finden ist, indem Sie Ihren absoluten Pfad zu der Projekt-Stammverzeichnis (wo Ihre Arbeitsbereich-Datei ist):

set directories /home/picaud/.../Cpp 

Nun sollte die Emacs gdb-Befehl ordnungsgemäß funktionieren und Sie können wie gewohnt debuggen.

(auch dies war eine einfache Lösung, nur ein Hinweis, dass ... kann vielleicht helfen)