Next: Delete Breaks, Previous: Set Watchpoints, Up: Breakpoints
キャッチポイントを使用することによって、
C++例外や共用ライブラリのローディングのような、
ある種のプログラム・イベントが発生したときに、
デバッガを停止させることができます。
キャッチポイントを設定するには、
catch
コマンドを使用します。
catch
eventthrow
catch
exec
exec
の呼び出し。
現在これは、
HP-UXにおいてのみ利用可能です。
fork
fork
の呼び出し。
現在これは、
HP-UXにおいてのみ利用可能です。
vfork
vfork
の呼び出し。
現在これは、
HP-UXにおいてのみ利用可能です。
load
load
libnameunload
unload
libnametcatch
eventカレントなキャッチポイントの一覧を表示するには、
info break
コマンドを使用します。
現在、
GDBにおけるC++の例外処理
(catch throw
とcatch catch
)
にはいくつかの制限があります。
catch
コマンドが、
例外処理をデバッグする手段としては最適なものではないような場合もあります。
どこで例外が発生したのかを正確に知りたい場合、
例外ハンドラが呼び出される前にプログラムを停止させた方がよいでしょう。
なぜなら、
スタック・ポインタの調整が行われる前のスタックの状態を見ることができるからです。
例外ハンドラの内部にブレイクポイントを設定してしまうと、
どこで例外が発生したのかを調べるのは簡単ではないでしょう。
例外ハンドラが呼び出される直前で停止させるには、
実装に関する知識が若干必要になります。
gnu C++の場合、
以下のようなANSI Cインターフェイスを持つ
__raise_exception
というライブラリ関数を呼び出すことで例外を発生させます。
/* addrは例外識別子が格納される領域 idは例外識別子 */ void __raise_exception (void **addr, void *id);
スタック・ポインタの調整が行われる前に、
すべての例外をデバッガにキャッチさせるには、
__raise_exception
にブレイクポイントを設定します
(see Breakpoints; watchpoints; and exceptions)。
idの値に依存する条件を付けたブレイクポイント (see Conditions) を使用することで、 特定の例外が発生したときにだけユーザ・プログラムを停止させることができます。 複数の条件付きブレイクポイントを設定することで、 複数の例外の中のどれかが発生したときにユーザ・プログラムを停止させることもできます。