Если ваше приложение 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 вызывается, когда исключение, поэтому из стека вызовов можно увидеть, что было брошено исключение из строки 4 исходного файла throw.C
Спасибо большое, это работает! Я знал, что это будет что-то вроде этого, но понятия не имел о названии функции ... __DoThrowV6 - это не простое имя, которое можно угадать ;-) – piokuc
Наши отладчики с графическим интерфейсом: (IBM Debugger для AIX, в комплекте с XL C/C++ для AIX, IBM Rational Developer для AIX и Linux) включают в себя гораздо более простые опции, позволяющие отключить debuggee при создании исключения C++. –
Как мы запускаем «IBM Debugger for AIX» - что называется бинарным? – JBRWilkinson