PERLDEBUG(1) USER COMMANDS PERLDEBUG(1)
NAME
perldebug - Perl のデバッグ
DESCRIPTION
まず最初に、一言「もう -w スイッチはお使いになりましたか。」
デバッグ
Perl を -d スイッチを付けて起動すれば、スクリプトはデバッガ
上で実行されることになります。 しかし、Perl デバッガは C で
の環境の様に独立したプログラムではありません。 その代わりに、
-d フラグによって、コンパイラがインタプリタに渡す擬似コード
にソース情報を埋め込むようにしています。 (これは、ソースが
デバッガ上で動作できるためには、正常にコンパイルできないとい
けないということです。) それからインタプリタが起動され、デ
バッガ自身を含む Perl ライブラリをロードします。 プログラム
は、最初の実行文の直前で停止し (ただし、以下を参照)、以下に
示す、いずれかのコマンドが入力されるのを待ちます:
h ヘルプメッセージの表示。
T スタックトレース。 サブルーティン内で @_ 引数に
おかしなことをしている場合には、スタックのバック
トレースで元の値が示されるとは限りません。
s シングルステップ実行。 別の実行文の先頭に到達す
るまで実行します。
n ネクスト。 次の実行文の先頭に到達するまで、サブ
ルーティンにまたがって実行します。
f フィニッシュ。 現在のサブルーティンを終えるまで
実行します。
c コンティニュー。 次のブレイクポイントに到達する
まで実行します。
c line 指定行までのコンティニュー。 1 度きりのブレイク
ポイントを指定した行に設定する。
<CR> 最後の n または s をリピートする。
l min+incr min から incr+1 行をリスト表示する。 min を省略
すると、最後に実行したリスト表示の終了か所から開
始します。 incr を省略すると前回の incr が使わ
れます。
l min-max 指定した範囲をリスト表示する。
l line 指定行をリスト表示する。
l 次の 1 ウィンドウをリスト表示する。
Perl manpages Last change: Release 5.0 Patchlevel 00 1
PERLDEBUG(1) USER COMMANDS PERLDEBUG(1)
- 前の 1 ウィンドウをリスト表示する。
w line 指定行付近のウィンドウ (数行以上のコード) をリス
ト表示する。
l subname サブルーティンのリスト表示。 長いサブルーティン
の場合には最初の部分だけが表示されます。 続きを
表示する場合には、"l" を使用してください。
/pattern/ ソースコード上で、pattern を用いて正規表現による
検索を行う。 最後の / はなくてもかまいません。
?pattern? ソースコード上で、pattern を用いて正規表現による
逆方向検索を行う。 最後の ? はなくてもかまいま
せん。
L ブレイクポイントまたはアクションをもつ行をリスト
アップする。
S すべてのサブルーティン名をリストアップする。
t トレースモードの on/off を切り替える (トグル)。
b line [ condition ]
ブレイクポイントを設定する。 line を省略すると
まさに実行しようとしている行に、ブレイクポイント
を設定します。 condition が指定されると、その文
にさしかかる度に評価され、condition が真となった
ときにだけブレイクポイントが働きます。 ブレイク
ポイントは、実行可能な文で始まる行にだけ、設定で
きます。 condition には if を使いません:
b 237 $x > 30
b 33 /pattern/i
b subname [ condition ]
サブルーティンの最初の実行可能文にブレイクポイン
トを設定します。
d line ブレイクポイントの削除。 line が省略されると、
まさに実行しようとしている行のブレイクポイントを
削除します。
D すべてのブレイクポイントの削除。
a line command
line にアクションを設定する。 複数行の command
は、バックスラッシュと改行で書くことができます。
command は Perl コードであって、他のデバッガコマ
ンドではありません。
Perl manpages Last change: Release 5.0 Patchlevel 00 2
PERLDEBUG(1) USER COMMANDS PERLDEBUG(1)
A すべての行のアクションを削除します。
< command デバッガがプロンプトを出す直前に、毎回実行するア
クションを設定します。 複数行の command は、バ
ックスラッシュと改行で書くことができます。
> command スクリプトの実行に戻るコマンドを入力した時に、デ
バッガがプロンプトを出した後で、毎回実行するアク
ションを設定します。 複数行の command は、バッ
クスラッシュと改行で書くことができます。
V package [symbols]
package (デフォルトは main) 内のすべて (または、
一部) の変数 (variable) をデータプリティプリンタ
を使って表示する (ハッシュは何が何か解るように、
key と value を表示し、コントロール文字は表示で
きる形にします)。 以下に示すように、symbol は名
前だけを示し、($ などの) 型識別子を付けないよう
にしてください:
V DB filename line
X [symbols] "V" コマンドと同じだが、現在のパッケージについて、
表示する。
! number デバッグコマンドを再実行する。 number が省略さ
れると、直前のコマンドを実行する。
! -number 指定数値分前のコマンドを実行する。
H -number 最近の指定数値分のコマンドを表示する。 2 文字以
上のコマンドのみが表示されます。 number が省略
されると、全てを表示します。
q or ^D クイット。 ("quit" はこの目的には使えません。)
command command を Perl の文として実行します。 セミコロ
ンはなくてもかまいません。
p expr print DB::OUT expr と同じ。 STDOUT がどこにリダ
イレクトされていても、ファイルハンドル DB::OUT
は、/dev/tty に対してオープンされています。
デバッガが認識できないコマンドを入力すると、Perl のコードと
して、直接 eval されます。 先頭にスペースを入れると、デバッ
ガは、デバッガコマンドと認識しません。
コンパイル時に実行されるコマンド (BEGIN ブロック内のコードや
use 文) があれば、それらはデバッガによって止めることができま
せん (require は可能)。 しかし、以下のような文を自分でコー
Perl manpages Last change: Release 5.0 Patchlevel 00 3
PERLDEBUG(1) USER COMMANDS PERLDEBUG(1)
ドに含めれば、デバッガに制御を渡すことができます。 この文は、
デバッガを起動していないときには、何もしません:
$DB::single = 1;
カスタマイズ
デバッガを変更したい場合には、perl5db.pl を Perl ライブラリ
から別の名前にコピーし、必要に応じて修正してください。 また、
環境変数 PERL5DB には、以下のように設定する必要があるでしょ
う:
BEGIN { require "myperl5db.pl" }
初期化コードを入れたファイル .perldb を設定することでも、い
くらかのカスタマイズができます。 たとえば、以下のようなエイ
リアスが行えます (特に最後のものは、多くの人が使うでしょう):
$DB::alias{'len'} = 's/^len(.*)/p length($1)/';
$DB::alias{'stop'} = 's/^stop (at|in)/b/';
$DB::alias{'.'} = 's/^\./p '
. '"\$DB::sub(\$DB::filename:\$DB::line):\t"'
. ',\$DB::dbline[\$DB::line]/' ;
他のリソース
-w スイッチはもう使いましたよね?
BUGS
プログラムで exit() や die() を行なう場合には、デバッガも終
わります。
1 度終了して、再起動する以外に、デバッガを再実行する組み込み
のしくみは用意されていません。 以下のようなエイリアスを行な
うことができます:
$DB::alias{'rerun'} = 'exec "perl -d $DB::filename"';
しかし、設定中のブレイクポイント情報は失われますし、正しいパ
スでない可能性がある、といったことに注意しなくてはなりません。
Perl manpages Last change: Release 5.0 Patchlevel 00 4