ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ Oracle Solaris Studio 12.3 Information Library (日本語) |
プログラムを実行していないときはいつでも、プログラム内の関数やファイルに移動できます。プログラムに含まれるすべての関数またはファイルを表示できます。現在のスコープは プログラムの停止位置に設定されます (「プログラムスコープ」を参照してください)。この機能は、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++ の場合、あいまいな名前または多重定義されている関数名を指定してメンバー関数を表示しようとすると、多重定義されているというメッセージが表示され、指定された名前を持つ関数のリストが示されます。表示したい関数の番号を入力します。関数が属している特定クラスを知っている場合は、クラス名と関数名を入力できます。例:
(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 コマンドを使用します。
呼び出しスタックの移動についての詳細は、「スタックを移動してホームに戻る」を参照してください。