Подтвердить что ты не робот

Gdb catchpoint для исключенных исключений С++ только?

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

catch throw

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

Спасибо!

4b9b3361

Ответ 1

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

break abort
...
run
...
bt

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