2

AIX マシン上の特定の入力データに対して「不正な割り当て」エラー メッセージで終了する C++ アプリケーションがあります。

プログラムを dbx で実行し、スローされたときに例外をキャッチする方法はありますか? IBM のドキュメントには、それについて何も表示されません。

4

1 に答える 1

5

C++ アプリケーションが XL C/C++ でコンパイルされている場合は、__DoThrowV6 にブレークポイントを設定します。

$ cat throw.C
int foo(int x)
{
   if (x < 0)
      throw 99;
   return x+1;
}

int main()
{
   int y;
   y = -5;
   try
   {
     foo(y);
   }
   catch(...)
   {
   }
   return 0;
}

$ xlC -g -o throw throw.C

$ dbx ./throw
Type 'help' for help.
reading symbolic information ...
(dbx) stop in __DoThrowV6
[1] stop in __DoThrowV6
(dbx) run
[1] stopped in __DoThrowV6 at 0xd1be7e00
0xd1be7e00 (__DoThrowV6)    7c0802a6        mflr   r0
(dbx) where
__DoThrowV6() at 0xd1be7e00
foo(int)(x = -5), line 4 in "throw.C"
main(), line 14 in "throw.C"
(dbx)

__DoThrowV6 は例外がスローされたときに呼び出されるため、コール スタックから、ソース ファイル throw.C の 4 行目から例外がスローされたことがわかります。

于 2013-11-29T01:51:25.490 に答える