Eclipse CDTには、グラフィッカルなgdbインタフェースがついてきます。

これが最近便利すぎるので、オススメ機能をここらでまとめときます。

基本的な設定方法

コンパイルオプション

まずは実行ファイルを作るときにコンパイルオプションで以下を追加。

CPPFLAGS += -g -O0

-g : GDB用のデバッグ情報を実行ファイルに含める。

-Oo : コンパイラに最適化をさせない。

ルックアップパスの設定

デバッグ・パースペクティブにソースが現れないときは、ソースのパスが設定されていない。

Can’t find a source file at : hogehoge…

[ウィンドウ] > [設定] > [C/C++] > [デバッグ] > [ソース・ルックアップ・パス] から追加したいソースがあるフォルダを追加する。

GDBを実行してみる

デバッグ・パースペクティブからF11を実行できればOK。

ソースを見ながらブレークポイントをはって、ステップ実行

ソースを見ながらブレイクポイントをはれるのが嬉しい。

貼る方法も、解除する方法も、クリックひとつだ。

はった場所は、別のビューから確認できる。

2013_0226_gdb_0.png

構造体や変数のなかもスケスケ丸見え

gdbの恩恵は、変数や構造体の中身を見て、さらに値を書き換えて実行できるところだ。

構造体のネスト構造を中の中まで確認できるのがとても嬉しい。

また、xUnitではテストしづらい部分もブレークを貼って手動で値を書き換えてテストスルことができる。痒いところに手が届くとは、ここから始まった。

変数や構造体の参照は、[変数ビュー]で確認できる。

図は複雑怪奇なaddrinfo構造体とsockaddr構造体。

中身の値まで丸見えだ。なんなら、書き換えも同じビューで可能。

2013_0226_gdb_01.png

また、ソース上で変数の上にカーソルを移動するだけでも確認できる。

ステップ実行で、セグメンテーション違反した箇所まで移動できる

これについては、以前記事にまとめたので、こちらを参照。

ステップ実行のためのよく使用するショートカットも以下にまとめます。

起動 F11 gdbを起動する
再開 F8 gdbを再開する。 はじめはmainで止まるので、F8でブレイクポイントまで移動することを
ステップイン F5 ステップ実行をする。 一行ずつプログラムを進めることができる。
ステップオーバー F6 関数単位で実行する。 関数の頭でステップオーバーすると、 関数内にはいらずに次の処理へすすむ。 結構使う。
ステップ・リターン F7 現在の関数がreturnするまでを実行する。 まあまあ使う。

他にも、ウォッチポイントを簡単に設定できたり、逆アセンブリ結果を表示できる。

とにかく高機能だ。

こんな便利なものが、無料で使えるならば、利用しない手はないだろう。

補足

  • Eclipse 3.7 Indigoでは、gdb7.4以降のバージョンが動作しないようだ。

Undefined maintenance set command: “python print-stack off”. Try “help maintenance set”.

のようなメッセージが出るはず。そんなときは、

  • Eclipse 4.2 Junoにアップグレードする。
  • gdbをダウングレードする。

のいづれかが必要。自分はcygwinで一つ前のgdbのバージョンに設定したら動いた。

Eclipse Community Forums: CDT ≫ Error message from debugger back end

  • Eclipseを使ってない場合はInsightという方法もある。