アメリエフの技術ブログ

Amelieff Staff Blog

Perl デバッグ

さて、あなたがPerlでプログラムを作成し、use strict や use warnings で怒られないところまで進んだとします。
次に、やることはプログラムを実際に動かすところですね。
ところが、実は、ここでも上手くいかないことが多々あります。
出るはずのない数字、結果、エラー・・・。
そのプログラムにはバグが潜んでいるのです。

バグとは、コンピュータプログラムの製造(コーディング)上の誤りや欠陥を表します。(wikipediaより)

プログラムが長くなればなるほど、バグを含む確率は上がります。
どこでおかしな値が出ているのか、どこで動作がおかしくなっているのか、それを突き止めるのは大変な時もあります。

そこで、お勧めするのが、デバッガと呼ばれる、バグ修正を助けてくれるツールです。
perlを実行するときに、以下のように -d をつけて実行してみましょう。そうすると、そのプログラムはデバッグモードで実行することができます。

$ perl -d hoge.pl

すると、実際の命令行の冒頭が表示されます。そこで、以下のコマンドを用いながら、プログラムの動作を確認していきます。

n: 一行実行
n と一回打ち込んで enter を押すと一行ずつ実行されます。ソースの内容がそのまま表示されるので、どの行を実行しているのかもよくわかります。ちなみに、n の場合はサブルーチンは飛ばして進みます。

s: ステップイン
基本は上の n と同じで一行ずつ実行していきますが、s を使った場合は、サブルーチンの中も辿っていきます。

enter: 直前の s か n を繰り返す
一回 s か n を実行した後は、enterキーを押すだけでその処理を繰り返すことができます。

r: サブルーチンから抜け出す
s でサブルーチンに入ったのはいいけど、同じ繰り返しが何回もあって、早く元のルーチンに戻りたい・・・という時に、r コマンドでサブルーチンを脱出できます。

c: 指定行まで実行
例えば、c 300 とすれば、300行目まで一気に実行し、そこで止まってくれます。また、プログラム中にブレークポイントを設定しておけば、c と打つだけでそのブレークポイントの次まで一気に実行できます。

ちなみにブレークポイントはソースの中に次の一文を追加すると設定できます。
$DB::single = 1;

p: 変数を表示
p $hoge とすれば、$hoge の中身を表示してくれます。これはとても便利で、450行目の時の $hoge の中身が知りたい時は、c 450 と打った後、p $hoge と打つとその中身がわかります。

q: 終了
q と打てば、デバッガは終了します。

他にも色々なコマンドがありますので、興味がある方は是非ネットでいろいろ調べてみてください。

あなたのバグが早くとれますように・・・。