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

印刷ビューの終了

更新: 2015 年 1 月
 
 

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++ では無効です。