web-dev-qa-db-fra.com

Débogage C ++ avec gdb & bazel (& emacs)

Je veux déboguer un exécutable généré avec Bazel. Le débogueur gdb est perdu avec les liens générés par Bazel et n'est pas en mesure de me montrer le code source C++. Comment y remédier?

Le répertoire racine du projet est / 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
10
Picaud Vincent

première étape consiste à générer des exécutables en utilisant le mode de débogage:

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

(l'option - s n'est pas obligatoire elle ne montre que les commandes exécutées, vous pouvez la supprimer si vous le souhaitez)

débogage gdb depuis la ligne de commande:

Vous pouvez démarrer gdb avec la commande this (à partir du répertoire racine de votre projet):

gdbtui bazel-bin/bin/main

-> tout va bien, vous devriez voir votre code source C++.

Le l'erreur serait de faire:

cd bazel-bin/bin/
gdbtui main

Dans ce cas, en raison des liens, gdb n'est pas en mesure de récupérer le code source.

débogage gdb depuis Emacs:

Faites comme d'habitude

M-x gdb 

Dans l'invite emacs, définissez le chemin absolu complet vers l'exécutable:

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

Maintenant dans le tampon gdb vous devez indiquer à gdb où trouver la source en définissant votre chemin absolu vers le répertoire racine du projet (où se trouve votre fichier WORKSPACE):

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

La commande emacs gdb devrait maintenant fonctionner correctement et vous pouvez déboguer comme d'habitude.

(eh bien, c'était une solution facile, juste une note qui peut peut-être aider ...)

19
Picaud Vincent