web-dev-qa-db-ja.com

gdbとbazel(&emacs)によるC ++デバッグ

Bazelで生成された実行可能ファイルをデバッグしたい。 gdbデバッガーはBazelによって生成されたリンクで失われ、C++ソースコードを表示できません。それを修正するには?

プロジェクトのルートディレクトリは/ 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

最初のステップは、デバッグモードを使用して実行可能ファイルを生成します。

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

-sオプションは必須ではなく、実行されたコマンドのみを表示します。必要に応じて削除できます)

コマンドラインからのgdbデバッグ:

thisコマンドでgdbを開始できます(プロジェクトのルートディレクトリから):

gdbtui bazel-bin/bin/main

->すべて問題ありません。C++ソースコードが表示されます。

エラーが発生します

cd bazel-bin/bin/
gdbtui main

その場合、リンクが原因で、gdbはソースコードを取得できません。

Emacsからのgdbデバッグ:

いつものように

M-x gdb 

Emacsプロンプトで、実行可能ファイルへの完全な絶対パスを定義します。

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

gdb bufferで、プロジェクトのルートディレクトリ(WORKSPACEファイルがある場所)への絶対パスを定義して、ソースの場所をgdbに通知する必要があります。

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

これで、emacs gdbコマンドが正しく機能するようになり、通常どおりデバッグできます。

(まあこれは簡単な修正でした、おそらく助けることができるメモです...)

19
Picaud Vincent