次の例は、例外を含むサンプルプログラムを使用して、 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 -unhandled -unexpected (dbx) intercept int <dbx> intercept -unhandled -unexpected int (dbx) stop in bar (2) stop in bar() (dbx)run Running: a.out (プロセス id 304) 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) _exdbg_notify_of_throw で停止しました アドレス 0xef731494 0xef731494: _exdbg_notify_of_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 } |