Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
#1

Eclipse +GDB: проблемы с отладкой - C++

10.09.2011, 13:21. Просмотров 2478. Ответов 4
Метки нет (Все метки)

В коде в начале идет инициализация переменных, а потом считывание строки:
C++
1
2
cout << "Input expression to convert > ";
cin >> in_string;
Включаю режим отладки нажатием клавиши F11. Иду по шагам (step over). После прохождения строки с cout строка не выводится (и в консоли не выдается вообще ничего), а при прохождении строки с cin поток (как пишет эклипс) уходит в состояние Running:Step и больше ни на что не реагирует. После этого единственное, что можно с ним сделать - остановить. В нормальном режиме все работает без проблем. Подскажите, что я делаю не так, когда отлаживаю программу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 13:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Eclipse +GDB: проблемы с отладкой (C++):

Visual c++. Проблемы с отладкой - C++
Здравствуйте. Почему при отладке студия иногда показывает не все локальные переменные? Например, при отладке в 10-ой студии следующей...

Проблемы с cin::getline в Eclipse-CDT - C++
Я использую CDT Internal Builder и MS Visual C++ Toolchain в моем проекте Eclipse. Проблема в том, что компилятор ругается: когда я...

GDB 7.5 - C++
Помогите пожалуйста как установить GDB 7.5 к MinGW.MinGW установлен. http://ftp.gnu.org/gnu/gdb/ я скачал отсюда который 27 мб распокавал...

Отладка GDB - C++
Всем доброго дня! Знакомлюсь с отладчиком GDB Хочу выполнить пример из книги: Создаю файл bug.cpp Компилирую программу...

GDB обращение к памяти - C++
Прошу прощения за может глупый вопрос, но как такое может быть (gdb) print _params.DirectReplies $18 = true (gdb) print...

запуск программы в gdb - debugger - C++
Доброго времени суток, появилась необходимость диззасемблировать функцию одну #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; void lame...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TheAthlete
152 / 152 / 13
Регистрация: 31.08.2010
Сообщений: 535
10.09.2011, 13:37 #2
Привет! Она ничего и не будет выводить, т.к. ожидает ввода пользователя, в данном случае строки, и только потом сбрасывает буфер. Почитай про буферы ввода/вывода и манипуляторы endl, flush и другие в стандартной библиотеке ввода-вывода.

В твоем случае могу посоветовать использовать flush, т.е. написать вот так

cout << "Input expression to convert > " << flush;
cin >> in_string;

Манипулятор flush сбрасывает буфер потока, но никаких символов в вывод не добавляет.
При этом можно сделать одно замечание: Буфер вывода не сбрасывается, если программа завершается аварийно.

Более подробно можешь почитать в книге "Язык программирования С++. Вводный курс. Стенли Б. Липпман, Жози Лажойе, Барбара Му" Глава 8. Библиотека ввода-вывода
DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
10.09.2011, 13:51  [ТС] #3
Цитата Сообщение от TheAthlete Посмотреть сообщение
Привет! Она ничего и не будет выводить, т.к. ожидает ввода пользователя, в данном случае строки, и только потом сбрасывает буфер. Почитай про буферы ввода/вывода и манипуляторы endl, flush и другие в стандартной библиотеке ввода-вывода.

В твоем случае могу посоветовать использовать flush, т.е. написать вот так

cout << "Input expression to convert > " << flush;
cin >> in_string;

Манипулятор flush сбрасывает буфер потока, но никаких символов в вывод не добавляет.
При этом можно сделать одно замечание: Буфер вывода не сбрасывается, если программа завершается аварийно.

Более подробно можешь почитать в книге "Язык программирования С++. Вводный курс. Стенли Б. Липпман, Жози Лажойе, Барбара Му" Глава 8. Библиотека ввода-вывода
Я немного не понял, что вы имеете в виду, но попробовал. В режиме отладки поток уходит в описанный в первом посте режим сразу после flush, однако строка появляется, а после неё:
*stopped,reason="end-stepping-range",frame={addr="0x0040182b",func="main",args=[],file="../src/InToPost.cpp",fullname="D:/Project/EclipseProject/InToPost/.settings/../src/InToPost.cpp",line="43"},thread-id="1",stopped-threads="all". Что это значит?

P.S.Все, разобрался, debuger хочет прямого ввода команд в консоль в данном случае, но это, мое мнение, как то неудобно. Можно ли это исправить?
TheAthlete
152 / 152 / 13
Регистрация: 31.08.2010
Сообщений: 535
10.09.2011, 14:06 #4
я с gdb не работал, но могу сказать, что вероятно все отладчики так работают, т.е. им же надо как-то давать данные. А так программа работает в реальном времени, то и ввод данных тоже в реальном времени, т.е. ввели данные и отладка пошла дальше.

Вероятно можно в самом отладчике до этой точки задать нужно значение. Я одно время работал с OllyDbg немного
DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
10.09.2011, 14:28  [ТС] #5
Цитата Сообщение от TheAthlete Посмотреть сообщение
я с gdb не работал, но могу сказать, что вероятно все отладчики так работают, т.е. им же надо как-то давать данные. А так программа работает в реальном времени, то и ввод данных тоже в реальном времени, т.е. ввели данные и отладка пошла дальше.

Вероятно можно в самом отладчике до этой точки задать нужно значение. Я одно время работал с OllyDbg немного
Вы немного не поняли. Понятное дело, что он требует ввода данных в реальном времени. Но суть в том, что после команды Flush (полагаю и ещё целого ряда команд) отладчик требует чтобы его явно перевели на следующую команду (f6 - горячая клавиша IDE Eclipse для этого - не работает) командой -exec-next. Вот и интересно узнать, можно ли поставить, чтобы эта команда вводилась автоматически?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 14:28
Привет! Вот еще темы с ответами:

ошибка программы. расшифровать gdb и valgrind - C++
подскажите пожалуйста в чем мб трабла? /******************************gbd***************************/ Program received signal...

вопрос по gdb (пытаюсь отловить segmentation fault) - C++
Добрый вечер. В обшем история такая, запуск программы с gdb выводит следуюшее сообшение: *** auto turn END was activated, turn num =...

Как подцепить отладчик msys2 CodeBlock gdb - C++
Не понял как подцепить отладчик. CodeBlock Компилируется. Выполняется. Но как с отладкой возиться не очень понятно. Building to...

Исправить ошибку в WxDev-C++: Error with debugging process: GDB Error: error, No source file named main.cpp - C++
Здравствуйте товарищи! Новенький я в си, установил wxDev-C++, скомпилировал, запускаешь - работает, а чтоб пошагово отладка - не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.09.2011, 14:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru