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

C++ ポインタを出力する

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

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

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

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

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