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

C++ での表示

C++ では、オブジェクトポインタに 2 つの型があります。1 つは静的な型で、ソースコードに定義されています。もう 1 つは動的な型です。dbx は、動的な型のオブジェクトに関する情報を提供できる場合があります。

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

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

これらのコマンドには、-d または +d オプションも使用できます。これは、dbxenv output_derived_type でデフォルト動作を切り替えることができます。

プロセスが何も実行されていないときに、-d フラグを使用するか、またはdbxenv output_dynamic_typeon に設定すると、プロセスがないときに動的情報にアクセスすることは不可能なため、プログラムは実行可能な状態ではないことを表すエラーメッセージが出されます。仮想継承から動的な型の検索を試みると、クラスポインタの不正なキャストを表すエラーメッセージが生成されます (仮想基底クラスから派生クラスへのキャストは C++ では無効です)。

C++ プログラムにおける無名引数を評価する

C++ では、次のように無名の引数を持つ関数を定義できます。


void tester(int)
{
};
main(int, char **)
{
   tester(1);
};

無名の引数はプログラム内のほかの場所では使用できませんが、dbx は無名引数を評価できる形式にコード化します。その形式は次のとおりです。


_ARG%n

ここで、dbx%n に整数を割り当てます。

dbx によって割り当てられた引数名を入手するには、調べたい関数名を指定した whatis コマンドを実行します。


(dbx) whatis tester
void tester(int _ARG0);
(dbx) whatis main
int main(int _ARG1, char **_ARG2);

無名の関数引数を評価 (表示) するには、次のようにします。


(dbx) print _ARG1
_ARG1 = 4