Можно ли использовать gdb для возврата, когда пойманы исключения?

Я только начал использовать исключения С++ и хочу, чтобы все было правильно. То, что я имею в виду, состоит в том, чтобы генерировать некоторую информацию обратной линии, когда исключены исключения. Первоначально у меня были идеи, похожие на Call-stack для исключений на С++, но в итоге выяснили, что это не совсем хорошо.

Я также прочитал Как сгенерировать stacktrace при сбое моего приложения gcc С++, но не хочу добавлять больше сложности в мой текущий проект. Поскольку в режиме отладки мне нужна только обратная трассировка, я надеялся, что с этой целью я смогу использовать gdb.

Моя стратегия заключалась в том, чтобы вставить точку останова в блок catch, а затем перейти через стек вызовов, чтобы точно определить, почему исключение было выбрано в первую очередь (или что вызвало его)? К сожалению, я не могу это сделать, поскольку, когда gdb достигает точки останова, он очищает стек вызовов, и я могу видеть только основные (то, что я поймаю). Это должно произойти, или я делаю что-то неправильно здесь?

Edit: Я просто хотел бы обобщить методы для других людей:

1-й метод (by paulsm4). Установите точку catch через catch throw для ловушки при броске или catch catch для ловушки на улове! Затем вызовите backtrace

2-й метод (с помощью ашполятора) Установите точку останова на __cxa_throw, а затем backtrace

3-й метод (в Qt Creator - если вам посчастливилось использовать). Вы можете легко установить точку останова при броске или улове!

Edit_2: Используя отладчик Qt Creator, кажется, что установка точки останова на __cxa_begin_catch также эквивалентна catch catch:)

Ответы

Ответ 1

Это:

http://sourceware.org/gdb/onlinedocs/gdb/Set-Catchpoints.html

Вы можете использовать точки catch, чтобы заставить отладчик остановиться на определенное время виды программных событий, таких как исключения на С++ или загрузка общая библиотека. Используйте команду catch для установки точки catch.

Таким образом, ответ должен быть "да", и он должен избегать проблем с двумя указанными вами ссылками.

Пожалуйста, отправьте сообщение, если это поможет! Лично я никогда не пробовал эту функцию GDB:)

Ответ 2

Резюме ответов из комментариев:

1-й метод (by paulsm4). Установите ловушку через catch throw для ловушки при броске или catch catch для ловушки на улове! Затем вызовите backtrace

2-й метод (с помощью ашполятора) Установите точку останова на __cxa_throw, а затем backtrace

3-й метод (в Qt Creator - если вам посчастливилось использовать). Вы можете легко установить точку останова при броске или улове!

Используя отладчик Qt Creator, кажется, что установка точки останова на __cxa_begin_catch также эквивалентна catch catch