Oracle® Developer Studio 12.5: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2016 年 6 月
 
 

変数と式の評価

このセクションは、dbx を使用して変数および式を評価する方法について説明します。

実際に使用される変数を確認する

dbx がどの変数を評価しているか確かでないときは、 which コマンドを使用して dbx が使用している完全修飾名を確認します。

変数名が定義されているほかの関数やファイルを調べるには、 whereis コマンドを使用します。

コマンドについては、which コマンドwhereis コマンドを参照してください。

現在の関数のスコープ外にある変数

変数、式または識別子の値を出力する

式はすべて、現在の言語構文に従う必要がありますが、dbx がスコープおよび配列を処理するために導入したメタ構文は除きます。

ネイティブコード内の変数または式を評価するには print コマンドを使用します。

print expression

Java コードの式、局所変数、またはパラメータを評価するには、print コマンドを使用できます。

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


注 -  dbx は、C++ の dynamic_cast および typeid 演算子をサポートしています。これらの 2 つの演算子で式を評価する場合、dbx は、コンパイラで提供された特定の実行時型識別関数を呼び出します。ソースで明示的に演算子を使用していない場合、これらの関数はコンパイラで生成されていない場合があり、dbx は式の評価に失敗します。

C++ ポインタの出力

C++ で、オブジェクトポインタには、静的な型 (ソースコードに定義される) と 動的な型 (キャストが行われる前のオブジェクト) の 2 つの型があります。dbx は、オブジェクトの動的な型に関する情報を提供できる場合があります。

通常、オブジェクトに仮想関数テーブルの vtable が含まれる場合、dbx はこの vtable 内の情報を使用して、オブジェクトの型を正しく知ることができます。

print コマンド、display コマンド、または watch コマンドは、-r (再帰的) オプション付きで使用できます。dbx はクラスによって直接定義されたすべてのデータメンバーと、基底クラスから継承されたものを表示します。

これらのコマンドは dbxenv 変数 output_dynamic_type のデフォルトの動作を切り替える -d または +d オプションもとります。

プロセスが実行されていないときに、-d フラグを使用するか、または dbxenv 変数 output_dynamic_typeon に設定すると、program is not active エラーメッセージが生成されます。コアファイルのデバッグ中に、プロセスがないと動的情報にアクセスすることが不可能なためです。仮想継承から動的な型の検索を試みると、「illegal cast on class pointers」というエラーメッセージが生成されます。仮想基底クラスから派生クラスへのキャストは C++ では無効です。

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 コマンドを参照してください。