為せばNaruto


2006-10-22 gdbの見える化 [長年日記]

_ イントロダクション

画像の説明

Emacs で GDB を もっと便利に使おう。

元ネタはNetBSD Meeting 19th (株)絹 藤原さんの発表より。

http://www.ki.nu/~makoto/e/emacs-gdb.pdf

_ 必要なもの

  • Emacs 22
  • _ Emacs 22 のインストール方法

    CVS レポジトリからソースを取得して、コンパイルを行う。
    % setenv CVS_RSH ssh (又は export CVS_RSH=ssh)
    % cvs -d:pserver:[email protected]:/sources/emacs login
    % cvs -d:pserver:[email protected]:/sources/emacs co emacs
    % cd emacs
    % ./configure
    % gmake bootstrap
    % sudo gmake install
    

    _ 設定

    ~/.emacs に以下の文を追加してください。

      (setq gdb-many-windows t)
      (setq gdb-use-separate-io-buffer t) ; "IO buffer" が必要ない場合は  nil で
    

    _ gdbの見える化?!

    ~/.emacs 編集後、emacs を起動して M-x gdb を入力してください。

    M-x gdb 入力後、 ミニバッファにデバッグを行うプログラム名を入力してください。

    Run gdb (like this): gdb -annotate=3 プログラム名
    
    gdb モードが起動すると以下のように6つのバッファが表示されます。
    +----------------------------------------------------------------------+
    |                               GDB Toolbar                            |
    +-----------------------------------+----------------------------------+
    | GUD buffer (I/O of GDB)           | Locals buffer                    |
    |                                   |                                  |
    |                                   |                                  |
    |                                   |                                  |
    +-----------------------------------+----------------------------------+
    | Source buffer                     | I/O buffer (of debugged program) |
    |                                   | (comint-mode)                    |
    |                                   |                                  |
    |                                   |                                  |
    |                                   |                                  |
    |                                   |                                  |
    |                                   |                                  |
    |                                   |                                  |
    +-----------------------------------+----------------------------------+
    | Stack buffer                      | Breakpoints buffer               |
    | RET      gdb-frames-select        | SPC    gdb-toggle-breakpoint     |
    |                                   | RET    gdb-goto-breakpoint       |
    |                                   | D      gdb-delete-breakpoint     |
    +-----------------------------------+----------------------------------+
    
    各バッファは以下のような意味を持っています。
    • GDB Toolbar - GDB を操作するためのツールバー
    • GUD buffer - 操作を行うバッファ
    • Locals buffer - ローカル変数名と値を表示するバッファ
    • Source buffer - ソースを表示するバッファ
    • IO/ buffer - プログラムの入出力を表示するバッファ
    • Stack buffer - 実行を停止したときの呼び出し関係を表示するバッファ
    • Breakpoints buffer - ブレークポイントを表示するバッファ

    _ バッファが崩れたときは、M-x gdb-restore-windows で元に戻る。

    _ 利点

    gdb を GUI ライクに使える。
    • gdb の使いかたがわからなくてもなんとかなっちゃう。
    • 変数やスタック、ブレークポイントが瞬時に見れる(見える化!)

    _ バグ?

    no window mode(emacs -nw) で起動するとうまくいかない。

    _ おまけ TIPS

    windmove-default-keybindgs の設定を .emacs に追加して、Shift+カーソルキーでウィンドウ間を移動できるようにするとなかなか便利に使用できます。

    本日のツッコミ(全3件) [ツッコミを入れる]
    _ hi_saito (2008-02-17 13:05)

    これ、凄い便利です。
    便利すぎて笑ってしまった。(w

    _ Naruto (2008-02-18 14:26)

    さいとーさんに補足されてしまった。(笑

    動作はもっさりしていますが、emacs の中で DDD のようなグラフィカルな環境でデバッグできるって言うのは利点ですよね。

    riece と同じように、この gdb モードもバッファが複数あって管理が面倒なので、
    elscreen と一緒に使うとさらに便利になると思います。

    _ Naruto (2008-02-19 01:09)

    s/補足/捕捉/
    部首が違うだけでずいぶん意味が違うんだなぁ…。

    本日のリンク元
    アンテナ
    その他のリンク元
    検索