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