UNIX/Linux及びシェル上には、プログラムやスクリプトのデバッグ用のコマンドがあります。
UNIXには、dbxというC/Pascal/FORTRAN...に対応するデバッガが、一部のUNIXやLinuxには、FSFのGNUプロジェクトによって開発されたgdbというC/C++/FORTRAN/Java/アセンブリ言語...に対応するデバッガが、ちなみにJavaには固有のjdb(別途デスクトップ環境用にJPDA/Java Platform Debugger Architecture)が、PerlにはPerlDB5.plなどがあります。
デバッガの基本操作は、その多くに似通っている部分があります。
CやJavaをdbx/gdb/jdbでデバッグするには、十分な情報を渡す為に実行ファイルを-gオプション付きでコンパイル、PerlソースをPerl5DB.plでデバッグするにはperlに-dオプションを渡して実行します。
dbx/gdb/PerlDB5.plには、いずれも他にオプションスイッチを渡して起動することもできますが、ここでは実行ファイルを渡すに留めます。
$ dbx foo
または
$ gdb bar
Enterを押すとデバッガのバージョン情報の後に以下のようなプロンプトが表示されます。
(dbx)
または
(gdb)
PerlDB5.plは、
$ perl -d hoge
のようにするとデバッガバージョン情報の後、以下のようにプロンプトが表示されます。
DB<1>
デバッガを一気に走らせ(実行し)た場合、エラーがなければ、そのまま終了し、デバッガが認識できるエラーがあれば、エラーメッセージを表示し、プロンプトが表示された状態になります。
また、デバッガは、ブレークポイントといわれるコマンド実行時に予め設定できるプログラム中の一時停止位置の設定や一行ずつ検証するステップ実行、(指定した)数行ずつ実行、再スタート、中断といった内部コマンドを利用する事ができるようになっています。
gdbコマンドの一例を示しますが、他のデバッガでも同じ場合もあります。
| コマンド | 用途 | |
|---|---|---|
| run | r | デバッグ実行開始、ブレークポイントからの実行再開 |
| continue cont | c | ブレークポイントから次のブレークポイント、ブレークポイント及びエラーがなければ最後まで継続実行 |
| next | n | 次(直近)の解析可能ポイントまで実行 ブレークポイント設定やstep実行で関数内に入り、次の妥当なポイントがない場合、関数の終わりまで実行 |
| step | s | ステップ実行(一行ずつ実行) |
| p | 有効スコープ内の変数値確認等(あらゆる型に対応) [ print 変数名 ]、値の設定も可[ print 変数名=値 ] |
|
| set | 当該行以降の変数値を設定[ set 変数名=値 ]など | |
| break | b | ブレイクポイント(一時停止位置)設定 [ break 行 ]または[ break 関数名 ] |
| delete | d | ブレークポイントの設定解除(削除) |
| list | l | ブレークポイントにおいて周辺ソースを一覧表示 |
| help | h | ヘルプを表示 |
| info | i | あらゆる情報を表示 |
| quit | q | デバッグ終了 |
一文字表記があるコマンドは、一文字で実行できることを意味します。
また、printコマンドはあらゆる型を表示してくれますが、その型を調べる為に以下のようなコマンドを利用できる場合があります。
| コマンド | 用途 |
|---|---|
| whatis | 変数の型などを表示 |
| ptype | 変数の型などを表示(構造体のメンバ参照なども可) |
更に関数に関して
| コマンド | 用途 |
|---|---|
| call | 関数をコール |
| return | 実行中の関数を破棄し呼び出し元に戻り値を返す |
| finish | 関数を終了させる(戻り値があれば表示) |
| backtrace | 関数内にある時、呼び出し元関数とその引数を調べる |
といったコマンドを利用できる場合があります。