Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
1

Проблема с try\catch - bad breakpoint

03.11.2011, 13:54. Показов 2607. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Написал простой блок кода с использованием try\catch
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 в код, расположенный ниже

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

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

Вопрос: кто-нибудь знает решение данной проблемы?
Буду очень благодарен за любые советы!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2011, 13:54
Ответы с готовыми решениями:

Не работают точки breakpoint - The breakpoint will not currently be hit. No symbols have been loaded for this document
что за проблема , как ее решить на VB 2010 ? только начал в нем работать и одна проблема за другой...

Battlefield Bad Company 2. Проблема управления.
Ребят, подскажи что можно сделать: Когда бегаю пешком мышка двигается невероятно быстро, а когда...

Проблема с возвращающим значением метода в блоке try-catch
Поставил блок try -catch, начало ругаться на значение return myArray;, которое должен вернуть...

Проблема с закрытием InputStream: try { dataStream.close(); } catch (Exception e) {...}
сам inputStream получаю с урла, а проблема возникает при следующем коде: URL dataURL = new...

8
Автор FAQ
2732 / 1428 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
03.11.2011, 14:03 2
в try блоке у тебя код выдает ошибку? т.е catch отрабатывае только тогда кода в try произошло исключение иначе он не отрабатывает!
0
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
03.11.2011, 14:14  [ТС] 3
Да, в try ОДНОЗНАЧНО срабатывает ошибка
Проблема в том, что я _ТОЧНО_ не знаю, при каких условиях, поэтому и поставил блок try\catch

Но почему в catch не сохраняется breakpoint?
Это ОЧЕНЬ странно, у меня это первый раз, но, очевидно, что это не конкретная ситуация, а общая проблема
Отсюда и вопрос - кто-то уже сталкивался с подобным, и как решал?

Добавлено через 6 минут
А ещё появляется ошибка
bad breakpoint number at or near '0'
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.11.2011, 14:39 4
У тебя внутри try-блока одни стандартные интерфейсы, которые, насколько я знаю, никаких исключений не бросают. Напиши внутри try-блока код, который заведомо бросает исключение (например, "throw int(0);") и проверь.

Попробовал на коротком примере. Компилятор g++, отладчик gdb

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int G;
 
int main (void)
{
  try
  {
    throw int(5);
  } catch (...)
  {
    G++;
  }
 
  return G;
}
Код
$ g++ t.cc -g
$ gdb a.out
(gdb) b t.cc:10
Breakpoint 1 at 0x8048627: file t.cc, line 10.
(gdb) run
Breakpoint 1, main () at t.cc:10
10          G++;
(gdb) print G
$1 = 0
(gdb) next
8         } catch (...)
(gdb) print G
$2 = 1
Видно, что остановились нормально: на моментостановки G ещё не модифицировано. Сделал шаг, после чего G изменилось

Добавлено через 1 минуту
Цитата Сообщение от Lindemann66 Посмотреть сообщение
Да, в try ОДНОЗНАЧНО срабатывает ошибка
"Ошибка" и "исключение" - это две разные вещи. У тебя ошибка из разряда некорректной работы с указателем. Тут никаких исключений Си++ не будет
1
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
03.11.2011, 14:48  [ТС] 5
Evg, спасиибо
Попробую как ты сказал...

А вот есть ли возможность именно ошибки замечать?
По аналогии с exeption'ами?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.11.2011, 15:11 6
Цитата Сообщение от Lindemann66 Посмотреть сообщение
А вот есть ли возможность именно ошибки замечать?
Смотря что понимать под ошибками. Если у тя прошло обращение по некорректному адресу, то на уровне операционной системы произойдёт прерывание, которое отладчик может поймать

C++
1
2
3
4
5
6
7
8
9
10
void func (int *p)
{
  *p = 0;
}
 
int main (void)
{
  func ((int*)main);
  return 0;
}
Код
$ g++ t.cc -g
$ ./a.out
Segmentation fault
$ gdb a.out
(gdb) run
Program received signal SIGSEGV, Segmentation fault.
0x08048426 in func (p=0x804842e) at t.cc:3
3         *p = 0;
(gdb) bt
#0  0x08048426 in func (p=0x804842e) at t.cc:3
#1  0x0804844c in main () at t.cc:8
Если у тебя случился простой выход за границу массива, то с большой вероятностью программа продолжит работать, потому как с точки зрения операционной системы адрес окажется корректным. Потому что машина и операционная система работают с памятью с квантом размером в одну страницу (как правило это 4 килобайта). Тут можно только писать код, который будет страховать тебя от ошибок: Статическая отладка программ
2
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
03.11.2011, 17:36  [ТС] 7
Evg, Соглашусь со всем, что ты написал, спасибо

Добавлено через 38 секунд
Пожалуй, на этом тему можно считать закрытой
Всем спасибо за советы
0
10 / 10 / 0
Регистрация: 25.12.2012
Сообщений: 15
06.02.2014, 02:02 8
В Кьют не видет try-catch. Возможно нужно подключить библиотеки? Подскажите какие. Прошу скинуть примерчик на обработку ситуаций полей ввода
0
Автор FAQ
2732 / 1428 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
06.02.2014, 20:31 9
Цитата Сообщение от agr0s Посмотреть сообщение
В Кьют не видет try-catch. Возможно нужно подключить библиотеки? Подскажите какие. Прошу скинуть примерчик на обработку ситуаций полей ввода
каких ситуаций ?
0
06.02.2014, 20:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2014, 20:31
Помогаю со студенческими работами здесь

При запуске windows выдаёт разные ошибку типо netio.sys, bad pool header, bad system config info
Всем привет форумчане! И так ближе к проблеме при установке виндовс 10 установка идёт нормально,...

HDD BAD& SMART BAD
Пршли на ремонт 3 ноута все в разное время от разных людей один из них нетбук с обычным жестким не...

Безработный BreakPoint
Здравствуйте. Возникла проблема с правильностью значения, возвращаемого функцией, поэтому я решил...

Chsize, breakpoint
Здравствуйте, проблема. Visual Studio 2017 ставит breakpoint после chsize: static bool first...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru