Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 13:54   #1
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
Вопрос Проблема с try\catch - bad breakpoint

Всем привет!

Написал простой блок кода с использованием try\catch
Код:
try {
    // Skip initial blankspace
    while (isspace(*ptr)) ++ptr;

    // Skip tagname
    if (!isalpha(*ptr)) return;

    while (!isspace(*ptr)) ++ptr;

    // Skip blankspace after tagname
    while (isspace(*ptr)) ++ptr;
} catch (...) {
    //код просто для того, чтобы поймать breakpoint
    int temp = 7; // вот тут стоит breakpoint
    temp = 8;
    return;
}
Задача: В отладке программа должна остановиться в breakpoint'e, который в catch

Проблема: почему-то, когда доходит до breakpoint'а, он каким-то чудесным образом переносится из блока catch в код, расположенный ниже

Код:
} catch (...) {
    int temp = 7; // тут стоял breakpoint
    temp = 8;
    return;
}
while (*ptr && *ptr != '>') { //breakpoint оказывается здесь
    ....
}
Вот, собственно, и проблема

Думал, что это может быть из-за того, что код в блоке catch не имеет "смысловой" нагрузки, поэтому игнорируется
Но, когда поместил в блок код, относящийся к работе, результат всё равно был тем же - breakpoint не срабатывает

Вопрос: кто-нибудь знает решение данной проблемы?
Буду очень благодарен за любые советы!

Последний раз редактировалось Lindemann66; 03.11.2011 в 14:01.
Lindemann66 вне форума Ответить с цитированием
Старый 03.11.2011, 14:18   #2
flance
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 184
По умолчанию

не вчитывался, просто как вариант.
в блоке try есть return. он отрабатывает. выполнение выходит из блока try, так и не зайдя в catch.
Программист-фрилансер, готовый рассмотреть предложения на постоянную удаленную работу... Ответственный, трудолюбивый
telegram: flancejob
flance вне форума Ответить с цитированием
Старый 03.11.2011, 14:20   #3
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Ну и...что?)
То есть, содержание того, что в try, влияет на ... breakpoint?
Как-то... нелогично получается)
Я вот грешу на то, что в Qt в принципе нет возможности ставить breakpoin'ы в блоки catch...
Но надеюсь, что это не так
Lindemann66 вне форума Ответить с цитированием
Старый 03.11.2011, 14:27   #4
flance
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 184
По умолчанию

Цитата:
Сообщение от Lindemann66 Посмотреть сообщение
Ну и...что?)
То есть, содержание того, что в try, влияет на ... breakpoint?
так если исключение не будет сгенерировано (по тем или иным причинам), почему программа должна остановиться на брейкпоинте в catch?
Программист-фрилансер, готовый рассмотреть предложения на постоянную удаленную работу... Ответственный, трудолюбивый
telegram: flancejob
flance вне форума Ответить с цитированием
Старый 03.11.2011, 14:30   #5
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

То есть, если за 1 проход по коду на breakpoint не пришлось ни одного "прохода", он переносится?)
Lindemann66 вне форума Ответить с цитированием
Старый 03.11.2011, 14:36   #6
flance
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 184
По умолчанию

ну... видимо да.
я вот не знаю насчет переноса брейкпоинта. Это, наверное, вопрос к среде, а не языку.
вызовите явно throw в try. если он остановится где надо, то я прав)
Программист-фрилансер, готовый рассмотреть предложения на постоянную удаленную работу... Ответственный, трудолюбивый
telegram: flancejob
flance вне форума Ответить с цитированием
Старый 03.11.2011, 17:34   #7
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Наверное, ты прав, потому что мне тут ещё объяснили...
breakpoint в catch имеет смысл только в том случае, если в try имеет место быть exception, а в моём случае в try происходит ошибка
поэтому компилятор и считает, что breakpoint никогда не сработает, потому что в catch элементарно никогда не будет захода
как-то так
Lindemann66 вне форума Ответить с цитированием
Старый 03.11.2011, 18:00   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

все гораздо проще:
ваш код в кетче ничего не делает и компилятор для оптимизации его выкидывает
p51x вне форума Ответить с цитированием
Старый 03.11.2011, 18:02   #9
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

)
ну я же написал, что добавлял туда "значимый" код, но он всё равно выкидывал его
Или...я просто имею неправильное понятие о "значимости" кода?))
Lindemann66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить BreakPoint lexaltd Общие вопросы Delphi 5 03.09.2010 14:59
проблема с try catch ArtSl Помощь студентам 6 14.02.2010 18:13
Hardware BreakPoint Д'якон Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 26.02.2009 08:23