次の例は、例外を含むサンプルプログラムを使用して、dbx で例外処理がどのように実行されるかを示しています。型 int の例外が、関数 bar で送出されて、次の捕獲ブロックで捕獲されています。
1 #include <stdio.h>
2
3 class c {
4 int x;
5 public:
6 c(int i) { x = i; }
7 ‾c() {
8 printf("destructor for c(%d)¥n", x);
9 }
10 };
11
12 void bar() {
13 c c1(3);
14 throw(99);
15 }
16
17 int main() {
18 try {
19 c c2(5);
20 bar();
21 return 0;
22 }
23 catch (int i) {
24 printf("caught exception %d¥n", i);
25 }
26 }
サンプルプログラムからの次のトランスクリプトは、dbx の例外処理機能を示しています。
(dbx) intercept int
(dbx) intercept
-unhandled -unexpected int
(dbx) stop in bar
(2) stop in bar(void)
(dbx) run
実行中: a.out
(プロセス id 1652)
bar で停止しました 行番号 13 ファイル "foo.cc"
13 c c1(3);
(dbx) whocatches int
int が行番号 24 で捕獲されました、関数 main (フレーム番号 2)
(dbx) whocatches c
dbx: class c の実行時型情報がありません (送出も捕獲もされていない)
(dbx) cont
例外の型 int が行番号 24 で捕獲されました、関数 main (フレーム番号 4)
_ex_dbg_will_throw で停止しました アドレス 0xef724344
0xef724344: _ex_dbg_will_throw : jmp %o7 + 0x8
現関数 :bar
14 throw(99);
(dbx) step
c::‾c で停止しました 行番号 8 ファイル "foo.cc"
8 printf("destructor for c(%d)¥n", x);
(dbx) step
destructor for c(3)
c::‾c で停止しました 行番号 9 ファイル "foo.cc"
9 }
(dbx) step
c::‾c で停止しました 行番号 8 ファイル "foo.cc"
8 printf("destructor for c(%d)¥n", x);
(dbx) step
destructor for c(5)
c::‾c で停止しました 行番号 9 ファイル "foo.cc"
9 }
(dbx) step
main で停止しました 行番号 24 ファイル "foo.cc"
24 printf("caught exception %d¥n", i);
(dbx) step
caught exception 99
main で停止しました 行番号 26 ファイル "foo.cc"
26 }