Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: silart от Февраль 18, 2013, 05:16



Название: Qt creator. Установка брэйкпоинтов
Отправлено: silart от Февраль 18, 2013, 05:16
Добрый день!

Использую Qt Creator + MinGW + GDB.

Заметил странную особенность.

Когда устанавливаешь брэйкпоинт внутри блока catch() {} он почему-то не срабатывает во время отладки. Но если из этого блока вызвать функцию и внутри нее установить брэйкпоинт, то все работает нормально. Внутри catch () {} устанавливать брэйкпоинты бывает очень удобно потому что в момент отлавливания исключения сразу видишь строку сообщения об ошибке:

Код:
        try
        {
        ...
        ...
        }
        catch (std::exception& e)
        {
            std::string what = e.what();
            cerr << what << endl;
        }

(http://s1.ipicture.ru/uploads/20130218/hqNNQ45o.jpg)


Название: Re: Qt creator. Установка брэйкпоинтов
Отправлено: carrygun от Февраль 18, 2013, 05:34
Дело не в try/catch. "Точка останова" срабатывает ДО выполнения оператора в строке, а не ПОСЛЕ его выполненя. Я обычно какойнить qDebug() вставляю на следующей строке, и на него вешаю эту точку.


Название: Re: Qt creator. Установка брэйкпоинтов
Отправлено: Bepec от Февраль 18, 2013, 07:01
А я просто ставлю на последнюю и делаю "Шаг" отладчиком.


Название: Re: Qt creator. Установка брэйкпоинтов
Отправлено: silart от Февраль 18, 2013, 07:03
Да, но в блоке catch() брэйкпоинты ни на какой строке не работают. Можно его поставить на строчку выше и будет тот же результат.
Не знаете в чем причина?


Название: Re: Qt creator. Установка брэйкпоинтов
Отправлено: Авварон от Февраль 23, 2013, 12:16
Для gdb можно в параметры запуска прописать "catch throw" и тогда отладчик будет брякаться на месте выброса исключения - гораздо удобнее, чем бряка в catch()


Название: Re: Qt creator. Установка брэйкпоинтов
Отправлено: silart от Февраль 25, 2013, 05:07
Для gdb можно в параметры запуска прописать "catch throw" и тогда отладчик будет брякаться на месте выброса исключения - гораздо удобнее, чем бряка в catch()

Да, я так пробовал, но мне показалось не очень удобным потому что не получается посмотреть что возвращает e.what(). Может как-то можно посмотреть?