次: Delete Breaks, 前: Set Watchpoints, 上: Breakpoints
キャッチポイントを使用することによって、
C++例外や共用ライブラリのローディングのような、
ある種のプログラム・イベントが発生したときに、
デバッガを停止させることができます。
キャッチポイントを設定するには、
catchコマンドを使用します。
catch eventthrowcatchexecexecの呼び出し。
現在これは、
HP-UXにおいてのみ利用可能です。
forkforkの呼び出し。
現在これは、
HP-UXにおいてのみ利用可能です。
vforkvforkの呼び出し。
現在これは、
HP-UXにおいてのみ利用可能です。
loadload libnameunloadunload 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) を使用することで、 特定の例外が発生したときにだけユーザ・プログラムを停止させることができます。 複数の条件付きブレイクポイントを設定することで、 複数の例外の中のどれかが発生したときにユーザ・プログラムを停止させることもできます。