2016-02-03 2 views
0

Что-то странное происходит, когда я пытаюсь отлаживать приложение. Просто отладчик не останавливается на контрольных точках, когда я устанавливаю точки останова в ловушке блока try-catch.Как установить точку останова в блоке catch? (C++)

Вот пример.

try { 
    throw std::overflow_error("test"); 
} catch (...) { 
    qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE 
} 

Он печатает «пойманный» на экране при возникновении исключения, но он не останавливается на этой строке. (Если вы когда-нибудь задумывались: да, я создаю приложение в режиме отладки и работаю в режиме отладки)

Я страдаю от отсутствия фундаментальных знаний о том, как работает gdb? (Я имею в виду, возможно, это не останавливается, потому что точки останова в ловушке не работают)

Любая помощь будет принята с благодарностью.

Спасибо.

+3

Вы уверены, что 'сорта :: threshold' кидает? –

+0

* Если ваш код бросает исключение, то только он попадет в catch catch.So убедитесь, что. –

+0

@MohamadElghawi вы правы, чтобы задать этот вопрос. Я не сказал, что это жалко, это всего лишь псевдокод. Это не должно быть пороговым методом. –

ответ

2

Чтобы поймать исключение в среде IDE, вам нужно выполнить команды gdb непосредственно в консоли gdb. Вот ссылка, как попасть в GdB консоли в Qt Создание IDE: Accessing gdb console in Qt-Creator

После того, как вы типа

catch throw 

, чтобы остановить, когда ваша программа генерирует исключение или

catch catch 

к остановитесь в блоке catch.

Если вам нужно поймать определенное библиотеки исключения, прочитайте эту тему: GDB: How to break when a specific exception type is thrown?

0

@ ben sen, я думаю, что любое высказывание может привести к такому поведению. Существует множество способов определения этих параметров (через переменные окружения aka CFLAGS или через IDE-параметры для проекта), но все они приводят к определенной опцией -O, заданной командной строке компилятора. Даже если ничего не дано вообще, проверьте, какая оптимизация по умолчанию для вашего компилятора. Мое предложение состояло бы в том, чтобы явно дать -O0 компилятору и проверить, что никакие другие опции -O не поставляются.

+0

Приносим извинения, я помещал свой комментарий в неправильное поле - пожалуйста, не рассматривайте его как ответ, а как комментарий. Спасибо. – dmi

+0

спасибо. Я отключил оптимизацию на -O0 и попытался перепрограммировать мое приложение. Опять же, это не остановилось в блоке catch. –

Смежные вопросы