GDB поймать только для необработанных исключений C ++? - PullRequest
12 голосов
/ 19 апреля 2011

Я могу сказать отладчику gdb остановиться, как только возникнет любое исключение C ++, установив точку перехвата с помощью команды gdb

catch throw

Однако есть ли способ остановиться только на необработанных исключениях C ++ (как в C # или Java)? В некоторых ситуациях это будет намного проще находить ошибки.

Спасибо!

1 Ответ

12 голосов
/ 19 апреля 2011

Если исключение не найдено, автоматически вызывается специальная библиотечная функция terminate().Завершение на самом деле является указателем на функцию, а значением по умолчанию является функция библиотеки Standard C abort().Вы можете иметь возможность установить точку останова при вызове функции abort() и определить оттуда местоположение необработанного исключения.

break abort
...
run
...
bt

Вы можете установить собственную функцию terminate(), используя std::set_terminate().Вы должны быть в состоянии установить точку останова на вашей функции завершения в GDB.Вы можете иметь возможность генерировать обратную трассировку стека из вашей функции terminate(), и эта обратная трассировка может помочь в определении местоположенияисключение.Дополнительная информация предоставляется здесь .

...