このセクションは、dbx を使用して変数および式を評価する方法について説明します。
dbx がどの変数を評価しているか確かでないときは、 which コマンドを使用して dbx が使用している完全修飾名を確認します。
変数名が定義されているほかの関数やファイルを調べるには、 whereis コマンドを使用します。
コマンドについては、which コマンドと whereis コマンドを参照してください。
現在の関数のスコープ外にある変数を評価 (モニター) したい場合は、次のいずれかを行います。
関数の名前を特定します。スコープ決定演算子を使用してシンボルを特定するを参照してください。例:
(dbx) print ‘item
現在の関数を変更することにより、関数を表示します。コードへの移動を参照してください。
式はすべて、現在の言語構文に従う必要がありますが、dbx がスコープおよび配列を処理するために導入したメタ構文は除きます。
ネイティブコード内の変数または式を評価するには print コマンドを使用します。
print expression
Java コードの式、局所変数、またはパラメータを評価するには、print コマンドを使用できます。
詳細については、print コマンドを参照してください。
C++ で、オブジェクトポインタには、静的な型 (ソースコードに定義される) と 動的な型 (キャストが行われる前のオブジェクト) の 2 つの型があります。dbx は、オブジェクトの動的な型に関する情報を提供できる場合があります。
通常、オブジェクトに仮想関数テーブルの vtable が含まれる場合、dbx はこの vtable 内の情報を使用して、オブジェクトの型を正しく知ることができます。
print コマンド、display コマンド、または watch コマンドは、-r (再帰的) オプション付きで使用できます。dbx はクラスによって直接定義されたすべてのデータメンバーと、基底クラスから継承されたものを表示します。
これらのコマンドは dbxenv 変数 output_dynamic_type のデフォルトの動作を切り替える -d または +d オプションもとります。
プロセスが実行されていないときに、-d フラグを使用するか、または dbxenv 変数 output_dynamic_type を on に設定すると、program is not active エラーメッセージが生成されます。コアファイルのデバッグ中に、プロセスがないと動的情報にアクセスすることが不可能なためです。仮想継承から動的な型の検索を試みると、「illegal cast on class pointers」というエラーメッセージが生成されます。仮想基底クラスから派生クラスへのキャストは C++ では無効です。
C++ で無名の引数を持つ関数を定義できます。例:
void tester(int) { }; main(int, char **) { tester(1); };
無名の引数はプログラム内のほかの場所では使用できませんが、dbx は無名引数を評価できる形式にコード化します。その形式は次のとおりです。ここで、dbx は %n に整数を割り当てます。
_ARG%n
コンパイラによって割り当てられた名前を取得するには、 関数名をそのターゲットとして、whatis コマンドを使用します。
(dbx) whatis tester void tester(int _ARG1); (dbx) whatis main int main(int _ARG1, char **_ARG2);
詳細については、whatis コマンドを参照してください。
(dbx) print _ARG1 _ARG1 = 4
ポインタを間接参照すると、ポインタが指している内容に格納された値を参照できます。
ポインタを間接参照するため、dbx は、コマンドペインに評価を表示します。この例では、t の指す値です。
(dbx) print *t *t = { a = 4 }
プログラムが停止するたびに式の値をモニターすることは、特定の式または変数がいつどのように変化するかを知る効果的な方法です。display コマンドは、指定されている 1 つまたは複数の式または変数をモニターするように dbx に指示します。モニタリングは、undisplay コマンドによって停止するまで続けられます。watch コマンドは、すべての停止ポイントの式を、その停止ポイントでの現在のスコープ内で評価して出力します。
display コマンドは プログラムが停止するたびに変数または式の値を表示するために使用します。
display expression, ...
一度に複数の変数をモニターできます。オプションを指定しないで display コマンドを使用すると、監視対象のすべての式が表示されます。
詳細については、display コマンドを参照してください。
watch コマンドは、 すべての停止ポイントで式の値を監視するために使用します。
watch expression, ...
詳細については、watch コマンドを参照してください。
dbx は、 undisplay コマンドで表示が停止されるまで、モニターしている変数の値の表示を続行します。指定した式の表示を停止したり、現在モニターしているすべての式の表示を停止したりすることができます。
undisplay expression
undisplay 0
詳細については、undisplay コマンドを参照してください。