2013-11-27 8 views
1

У меня есть приложение C++, которое заканчивается сообщением об ошибке «плохое распределение» для определенных входных данных на машине AIX.Исключение C++ в AIX с dbx

Есть ли способ запустить программу в dbx и поймать исключение при его броске? Я ничего не вижу в документации IBM.

ответ

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 вызывается, когда исключение, поэтому из стека вызовов можно увидеть, что было брошено исключение из строки 4 исходного файла throw.C

+0

Спасибо большое, это работает! Я знал, что это будет что-то вроде этого, но понятия не имел о названии функции ... __DoThrowV6 - это не простое имя, которое можно угадать ;-) – piokuc

+0

Наши отладчики с графическим интерфейсом: (IBM Debugger для AIX, в комплекте с XL C/C++ для AIX, IBM Rational Developer для AIX и Linux) включают в себя гораздо более простые опции, позволяющие отключить debuggee при создании исключения C++. –

+0

Как мы запускаем «IBM Debugger for AIX» - что называется бинарным? – JBRWilkinson