Perlデバッガのカスタマイズ

Perlのデバッガを使っていると、プロンプトの部分も含めて全部同じ色で出力されてなんか見づらい。
せめてプロンプトの部分だけでも色を変えられたら見やすいだろうなぁ、というのが、カスタマイズしようと思ったきっかけ。


■カスタマイズ可能なオプション

もっとも、ある程度のカスタマイズはオプションの設定で行うことができる。perldoc perldebug を見ると、カスタマイズできるオプションの種類が挙げられている。
その中に windowSize というのがある。l コマンドをオプションなしで使ったとき、実行中のプログラムを現在のポインタ行から数行分表示してくれるが、デフォルトでは10行分表示となっている。ところが大きい画面を使っているとこの行数では足りないと感じることがよくある。そこで、デバッガ実行中に以下のように入力することで、表示行数を 20 行に増やすことができる。

DB<4> o windowSize="20"     ←入力
        windowSize = '20'

現在設定されている内容を知るには以下のように ? をつける。

DB<5> o windowSize?         ←入力
        windowSize = '20'

起動のたびに設定するのはめんどいので、設定ファイルに書いておくこともできる。
自分のホームディレクトリに ~/.perldb というテキストファイルを作り、以下のように記述しておけばよい。

parse_options("windowSize=20");


■カスタマイズした perl5db.pl を使う

ところが、プロンプトの色を変えるオプションというのはないらしい。ornaments というオプションがそれっぽいかなぁとも思った(下線とかつけられるらしい)。が、これを使って色を変えることができるのかどうも分からず。

そこで、デバッガ本体である perl5db.pl に手を加えることにした。
といっても、元々ある perl5db.pl を書き換えてしまうのはさすがにマズイので、

(1)perl5db.pl を別の場所にコピーして、カスタマイズ専用のデバッガを用意する。
(2)カスタマイズする。
(3)デバッグ実行時には、カスタマイズしたデバッガを指定して実行する。

以上の手順でカスタマイズを行った。


(1)カスタマイズ専用のデバッガを作る

perl5db.pl を、書き込み可能な場所にコピーする。

[egawata@twin] $ cp `perldoc -l perl5db.pl` ~/perl/myperl5db.pl

perldoc -l perl5db.pl は、perl5db.pl のありかを調べるコマンド。
今回は、オレオレデバッガの名前を myperl5db.pl とした。(安直)


(2)カスタマイズする

で、myperl5db.pl を見てみたんだが…なんじゃこりゃw
めっちゃカオス、というのが正直な感想。

まぁなんとか読み解いてみる。Ver.1.30 の perl5db.pl だと、2236行めあたりから、プロンプトを表示しユーザの入力を受け付ける部分が見つかる。

2235             # ... and we got a line of command input ...
2236             defined(
2237                 $cmd = &readline(
2238                         "\e[32m"			#  追加:文字色を緑に
2239                       . "$pidprompt $tid DB"
2240                       . ( '<' x $level )
2241                       . ( $#hist + 1 )
2242                       . ( '>' x $level )
2243                       . "\e[0m"			#  追加:文字色を元に戻す
2244                       . " "
2245                 )
2246             )

上記の 2238 行目で文字色を緑に変え、2243 行目で元に戻す行を挿入。
これで、プロンプト部分のみ色が変わる。

まぁ色はお好みで。
色の指定方法については、「エスケープシーケンス 色」あたりでぐぐるとよいと思う。(←手抜き


(3)デバッガを指定して実行

このまま perl -d を実行しても、デフォルトのデバッガが起動してしまう。今カスタマイズしたデバッガを使わせたい場合は、環境変数 PERL5DB に以下のように指定する。

PERL5DB='BEGIN {require "(使いたいデバッガへのパス)"}'

ちと奇妙な値になっているが、-d オプションで perl を起動すると、起動しようとしたPerl プログラムの先頭に、PERL5DB で指定された上記の内容が挿入される。(ちなみに指定されていない場合は、BEGIN {require 'perl5db.pl'} という行が挿入される。そのため標準のデバッガが起動する)

あと、使いたいデバッガへのパスは、カレントディレクトリ、絶対パス、もしくは @INC に登録されているディレクトリのいずれかでないとダメらしい。(~/perl/myperl5db.pl を指定したら見つからんと言われた)

実際には、以下のように指定してデバッガを起動する。

[egawata@twin] $ PERL5DB='BEGIN {require "/home/egawata/perl/myperl5db.pl"}' perl -d test.pl


毎回 PERL5DB の値を記述するのが面倒ならば、もちろん export してしまってもよい。


以上でめでたくプロンプトの色を変えることができたわけだが、perl5db.pl を読み解く覚悟があればw、もっといろいろ使いやすくカスタマイズできると思う。
とりあえずは perldebug, perldebguts を読むだけでも参考になると思う。