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

C++ プログラムに複数のブレークポイントを設定する

異なるクラスのメンバー関数の呼び出し、特定のクラスのすべてのメンバー関数の呼び出し、または多重定義されたトップレベル関数の呼び出しに関連する問題が発生する可能性があります。このような場合に対処するために、inmemberinclassinfunction または inobject のキーワードのうちの 1 つを stopwhen、または trace コマンドとともに使用することにより、1 回のコマンドで C++ コードに複数のブレークポイントを挿入できます。

異なるクラスのメンバー関数にブレークポイントを設定する

特定のメンバー関数のオブジェクト固有のもの (同じメンバー関数名でクラスの異なるもの) それぞれにブレークポイントを設定するには、stop inmember を使用します。

たとえば、関数 draw が複数の異なるクラスに定義されている場合は、それぞれの関数ごとにブレークポイントを設定します。


(dbx) stop inmember draw

inmember または inmethod イベントを指定する詳細については、inmember function inmethod functionを参照してください。

クラスのすべてのメンバー関数にブレークポイントを設定する

特定のクラスのすべてのメンバー関数にブレークポイントを設定するには、stop inclass コマンドを使用します。

デフォルトでは、ブレークポイントはクラスで定義されたクラスメンバー関数だけに挿入され、ベースクラスから継承した関数には挿入されません。ベースクラスから継承した関数にもブレークポイントを挿入するには、-recurse オプションを指定します。

クラス shape で定義されたすべてのメンバー関数にブレークポイントを設定するには、次のように入力します。


(dbx) stop inclass shape

クラス shape で定義されたすべてのメンバー関数およびクラスから継承する関数にブレークポイントを設定するには、次のように入力します。


(dbx) stop inclass shape -recurse

inclass イベントを指定する詳細については、inclass classname [-recurse | -norecurse]および stop コマンド」を参照してください。

stop inclass およびその他のブレークポイントを選択することにより、大量のブレークポイントが挿入される場合があるため、dbx 環境変数 step_events を必ず on に設定し、step および next コマンドの実行速度を上げるようにしてください (「イベント効率」参照)。

非メンバー関数に複数のブレークポイントを設定する

多重定義された名前を持つ非メンバー関数 (同じ名前を持ち、引数の型または数の異なるもの) に複数のブレークポイントを設定するには、stop infunction コマンドを使用します。

たとえば、C++ プログラムで sort() という名前の関数が 2 種類定義されていて、一方が int 型の引数、もう一方が float 型の引数をとる場合に、両方の関数にブレークポイントを置くためには、次のように入力します。


(dbx) stop infunction sort 

infunction イベントを指定する詳細については、infunction functionを参照してください。

オブジェクトにブレークポイントを設定する

In Object ブレークポイントを設定し、特定のオブジェクトインスタンスに適用する操作をチェックします。

デフォルトでは、In Object ブレークポイントは、オブジェクトからの呼び出し時に、オブジェクトのクラス (継承されたクラスも含む) のすべての非静的メンバー関数でプログラムを中断します。継承クラスを除くオブジェクトのクラスで定義された非静的メンバー関数だけでプログラムの実行を中断するには、-norecurse オプションを指定します。

オブジェクト foo のベースクラスで定義されたすべての非静的メンバー関数と、オブジ ェクト foo の継承クラスで定義されたすべての非静的メンバー関数にブレークポイントを設定するには、次のように入力します。


(dbx) stop inobject &foo

オブジェクト foo の継承クラスを除く、オブジェクト foo のクラスで定義されたすべての非静的メンバー関数だけにブレークポイントを設定するには、次のように入力します。


(dbx) stop inobject &foo -norecurse

inobject イベントの指定方法の詳細については、inobject object-expression [-recurse | -norecurse] および stop コマンド」を参照してください。