dbx コマンドによるデバッグ

停止位置とは別の部分のコードを表示する

プログラムを実行していないときはいつでも、プログラム内の停止位置とは別の部分を表示できます。プログラムに含まれるすべての関数またはファイルを表示できます。

ファイルの内容を表示する

dbx がプログラムの一部として認識していれば、どのファイルでもその内容を表示できます (モジュールまたはファイルが -g オプションでコンパイルされていない場合でも可能です)。ファイルを表示した場合、関数は変更されません。ファイルの内容を表示するためには、次のように入力します。


file filename

ファイルコマンドを単独で使用すると、現在表示中のファイル名が表示されます


file

dbx は、行番号を指定しないと、最初の行からファイルを表示します。


file filename ; list line_number

関数を表示する

func コマンドを使用すると、関数を表示することができます。コマンド func に続けて、関数名を入力します。func コマンドを単独で使用すると、現在表示中の関数が表示されます。次の例を示します。


(dbx) func adjust_speed

あいまいな関数名をリストから選択する (C++)

C++ の場合、あいまいな名前または多重定義されている関数名を指定してメンバー関数を表示しようとすると、多重定義されているというメッセージが表示され、指定された名前を持つ関数のリストが示されます。

指定の関数があいまいな場合は、表示したい関数の番号を入力します。関数が属している特定クラスを知っている場合は、次のように入力することができます。


(dbx) func block::block

複数存在する場合の選択

同じスコープレベルから複数のシンボルにアクセスできる場合、dbx は、あいまいさについて報告するメッセージを出力します。


(dbx) func main
(dbx) which block::block
識別子 'block' が複数あります
以下の名前から 1 つ選択してください:
 0)	取り消し
 1)	`Blocks`block.cc`block::block(void)
 2)	`Blocks`block.cc`block::block(char*, int, int, const point&, 
	load_bearing_block*)
>

which コマンドのコンテキストでシンボル名のリストから特定のシンボルを選んでも、dbx またはプログラムの状態には影響しません。いずれにせよ、どのシンボルを選んでも名前を表示するだけです。

which コマンドは、dbx がどのシンボルを検索するかを前もって示すものです。あいまいな名前を指定して、多重定義されていると表示された場合は、該当する複数の名前のうちのどれを使用するかがまだ特定されていません。リストに表示されている名前から 1 つを選んでください。

ソースリストの出力

list コマンドは、ファイルまたは関数のソースリストを出力するために使用します。filename を指定した場合は filename の先頭を表示、number を指定した場合は現在のファイルの number 行目を表示、function を指定した場合はその関数を表示します。


list [-i | -instr] [+] [-] number [ function | filename ]

呼び出しスタックの操作によってコードを表示する

プロセスが存在するときにコードを表示する方法としては、さらに「呼び出しスタックを操作する」方法があります。この方法では、スタック操作コマンドを使用して現在スタック上にある関数を表示します。

スタックを操作すると、現在の関数とファイルは、スタック関数を表示するたびに変更されます。停止位置は、スタックの「底」にあるものと考えられます。したがって、そこから離れるには up コマンドを使用します。つまり、main 関数などに向かって移動します。