気の向くままに辿るIT/ICT/IoT
UNIX/Linux

UNIX/Linux debug/debugger デバッグ/デバッガ

ホーム前へ次へ
UNIX/Linuxのデバッガとデバッグとは?

UNIX/Linux debug/debugger デバッグ/デバッガ

UNIX/Linux debug/debugger デバッグ/デバッガ

 UNIX/Linux及びシェル上には、プログラムやスクリプトのデバッグ用のコマンドがあります。

UNIX/dbx・Linux/gdb

 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/gdb/PerlDB5.plには、いずれも他にオプションスイッチを渡して起動することもできますが、ここでは実行ファイルを渡すに留めます。

$ dbx foo 

または

$ gdb bar 

 Enterを押すとデバッガのバージョン情報の後に以下のようなプロンプトが表示されます。

(dbx)

または

(gdb)

 PerlDB5.plは、

$ perl -d hoge 

のようにするとデバッガバージョン情報の後、以下のようにプロンプトが表示されます。

DB<1> 

デバッグコマンド

 デバッガを一気に走らせ(実行し)た場合、エラーがなければ、そのまま終了し、デバッガが認識できるエラーがあれば、エラーメッセージを表示し、プロンプトが表示された状態になります。

 また、デバッガは、ブレークポイントといわれるコマンド実行時に予め設定できるプログラム中の一時停止位置の設定や一行ずつ検証するステップ実行、(指定した)数行ずつ実行、再スタート、中断といった内部コマンドを利用する事ができるようになっています。

gdbコマンド一例

 gdbコマンドの一例を示しますが、他のデバッガでも同じ場合もあります。

コマンド用途
runrデバッグ実行開始、ブレークポイントからの実行再開
continue
cont
cブレークポイントから次のブレークポイント、ブレークポイント及びエラーがなければ最後まで継続実行
nextn次(直近)の解析可能ポイントまで実行
ブレークポイント設定やstep実行で関数内に入り、次の妥当なポイントがない場合、関数の終わりまで実行
stepsステップ実行(一行ずつ実行)
printp有効スコープ内の変数値確認等(あらゆる型に対応)
[ print 変数名 ]、値の設定も可[ print 変数名=値 ]
set当該行以降の変数値を設定[ set 変数名=値 ]など
breakbブレイクポイント(一時停止位置)設定
[ break 行 ]または[ break 関数名 ]
deletedブレークポイントの設定解除(削除)
listlブレークポイントにおいて周辺ソースを一覧表示
helphヘルプを表示
infoiあらゆる情報を表示
quitqデバッグ終了

 一文字表記があるコマンドは、一文字で実行できることを意味します。

 また、printコマンドはあらゆる型を表示してくれますが、その型を調べる為に以下のようなコマンドを利用できる場合があります。

コマンド用途
whatis変数の型などを表示
ptype変数の型などを表示(構造体のメンバ参照なども可)

 更に関数に関して

コマンド用途
call関数をコール
return実行中の関数を破棄し呼び出し元に戻り値を返す
finish関数を終了させる(戻り値があれば表示)
backtrace関数内にある時、呼び出し元関数とその引数を調べる

といったコマンドを利用できる場合があります。

LINK

ホーム前へ次へ