モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

cgdbを用いてpython拡張モジュール(てか、mypaint)をデバッグする方法

これまた備忘録的に…

  • 当然ながらgccとかg++はデバッグオプション(-g -O0) でビルド
  • mypaintの場合はsconsを使っているため、SConstructに書いてあるようにdebugオプションを使う
  • つまり、scons debug=true
  • デバッグビルドができたらcgdb pythonとする
  • b 関数名でブレークポイントを先行して設置
  • run mypaint
  • この後、関数が呼ばれたところで停止する…のだけど、もしかしてmypaintがX11をgrabしてしまっている場合はX11にアクセスできなくなり操作不能状況になるかもなので注意する。
  • あとは普通にcgdbを動かす

動かしているのがxfce4-terminalだとF10などのcgdbなどとデフォルトではバッティングするので、設定の上級者でF10を(xfce4-terminalにとって)無効化する。これはF10を「xfce4-terminalが」使わなくするので、アプリ側に制御が渡ると言う意味。多分キーバインドが変えられるはずなんだけども…

あとマストな設定がハイライトですかね。

cgdbは「現在の行」にブレークポイントを置くのだけど、ソースウィンドウのどこが現在の行なのかデフォルトでは全然わからない(もしかして、こっちのターミナルの設定が悪いのかもですが)

そこで、~/.cgdb/cgdbrcに

:hi SelectedLineNr cterm=none ctermfg=Cyan ctermbg=Black term=underline

(行頭のセミコロンが必要な模様)

として色を水色にしてしまうとかなりわかりやすい感じがします。とはいえ、ブレークポイントとかちあうとブレークポイントが優先されて見えなくなるのですが、それはそれでまぁ構わないというか…

こうやってやるのか、と勉強になる設定でした…っていうかもしかしてこれなら、netbeansとかのIDEから出来そうな気も?