Pyclewn で、GDB ノススメ☆

vim で簡単に GDB を使いたいでゲソよ!!
と、いう訳で vim 上で、GDB を行うツール(プラグイン?)の Pyclewn を試してみました。
前身として、clewn というものもあるみたいですが、こちらは Windows では使えないみたいです。
Pyclewn と clewn の違いなんかは、ここら辺を見れば分かりやすいと思います。

☆導入

最新は、ver1.5 みたいですが、Windows だと ver 1.4 のインストーラしかないっぽい?
ここら辺からインストーラを落としてきます。
ただ、インストール後の Pyclewn のバージョンを見てみると 1.5 になっていたりするのでよく分かりません……。
インストール時に特に設定とかはいらなかったと思います。

☆インストール/実行環境

  • WindwosXP
  • gvim 7.3(kaoriya)
  • gcc 4.5.2
  • python 2.6
  • Pyclewn 1.5

☆Pyclewn でデバッグを行うまでの流れ

[main.cpp]

int
plus(int a, int b){
    return a + b;
}

int
main(){
    int sum = 0;
    for( int i = 0 ; i < 10 ; i++ ){
        sum += i;
    }
    int n = plus(10, 4);
    return 0;
}
1.実行バイナリの作成
:!g++ -g main.cpp -o test.exe
2.Pyclewn の起動
:Pyclewn
3.実行バイナリの設定
:Cfile test.exe
4.キーバインドの設定

デフォルトでは、キーバインドが無効になっているので有効にします。

:Cmapkeys
5.ブレークポイントの設定

でカーソル行にブレークポイントが設定されます。

6.実行

(:Crun)で、GDB を実行します。
あとは、ステップしたりトーレスしたり変数の中身をごにょごにょと。
動作方法は↓のキーバインドを参考にしてください。

キーバインド

デバッグ中の基本的な操作方法です。
下記のコマンドで、Pyclewn のキーバインドを有効にしておく必要があります。

:Cmapkeys


msvc のキーバインドを比較するとこんな感じです。

Pyclewn msvc 備考
実行 F5  
ブレークポイントのON/OFF / F9/F9  
ステップオーバー F10 処理の中に侵入しないで1行ずつステップ
ステップイン F11 処理の中に侵入して、1行ずつステップ
ステップアウト Shift+F11 スコープから出る
続行 F5 次のブレークポイントに飛ぶ
終了 Shift+F5 Pyclewn は GDB が終了する

※S = Shift、C = Ctrl
詳しいキーバインドは :help で調べてみてください。

:help gdb-keys

☆変数の中身を出力

:Cdbgvar {変数名}

☆実際の動作

☆覚書

  • バイナリを作り直した場合は[:Cfile]をその都度呼び出す必要がある
  • GDB を終了したらブレークポイントも全部消える
  • GDB を起動するたびにブレークポイントを設定する必要が有る
  • Pyclewn コマンドは、:C〜から始まる


[参照]
http://blogs.yahoo.co.jp/m_okimotojp/51146346.html
http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/
http://d.hatena.ne.jp/parasporospa/20061215/p1
http://www.fireproject.jp/feature/gdb/