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
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 ...)