Я только начал использовать исключения С++ и хочу, чтобы все было правильно. То, что я имею в виду, состоит в том, чтобы генерировать некоторую информацию обратной линии, когда исключены исключения. Первоначально у меня были идеи, похожие на 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
:)