Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ

コードへの移動

プログラムを実行していないときはいつでも、プログラム内の関数やファイルに移動できます。プログラムに含まれるすべての関数またはファイルを表示できます。現在のスコープは プログラムの停止位置に設定されます (「プログラムスコープ」を参照してください)。この機能は、stop at ブレークポイントを設定し、停止したときにソース行を決定する際に便利です。

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

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


(dbx) file filename

file コマンドを引数を指定しないで使用すると、現在表示中のファイル名が表示されます。


(dbx) file

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


(dbx) file filename ; list line_number

ソースコードの行でブレークポイントを設定する詳細については、「ソースコードの特定の行に stop ブレークポイントを設定する」を参照してください。

関数を表示する

func コマンドを使用すると、関数を表示できます。コマンド func に続けて、関数名を入力します。次に例を示します。


(dbx) func adjust_speed

func コマンドを引数なしで使用すると、現在表示中の関数が表示されます。

詳細については、func コマンド」を参照してください。

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

C++ の場合、あいまいな名前または多重定義されている関数名を指定してメンバー関数を表示しようとすると、多重定義されているというメッセージが表示され、指定された名前を持つ関数のリストが示されます。表示したい関数の番号を入力します。関数が属している特定クラスを知っている場合は、クラス名と関数名を入力できます。次に例を示します。


(dbx) func block::block

複数存在する場合の選択

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


(dbx) func main
(dbx) which C::foo
More than one identifier ’foo’.
Select one of the following:
 0) Cancel
 1) ”a.out”t.cc”C::foo(int)
 2) ”a.out”t.cc”C::foo()
>1
”a.out”t.cc”C::foo(int)

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

ソースリストの出力

list コマンドは、ファイルまたは関数のソースリストを出力するために使用します。ファイルを検索したあと、list コマンドは、上から number 行を出力します。関数を検索したあと、list コマンドはその行を出力します。

list コマンドの詳細については、list コマンド」を参照してください。

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

プロセスが存在するときにコードを表示する方法としては、さらに「呼び出しスタックを操作する」方法があります。この方法では、スタック操作コマンドを使用して現在スタック上にある関数を表示します。その結果、現時点でアクティブなすべてのルーチンが表示されます。スタックを操作すると、現在の関数とファイルは、スタック関数を表示するたびに変更されます。停止位置は、スタックの「底」にあるものと考えられます。したがって、そこから離れるには up コマンドを使用します。つまり、main 関数または begin 関数に向かって移動します。現在のフレーム方向へ移動するには、down コマンドを使用します。

呼び出しスタックの移動についての詳細は、「スタックを移動してホームに戻る」を参照してください。