3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
||||||
1 | ||||||
Как можно пройти через бесконечный цикл ???31.10.2009, 12:30. Показов 4105. Ответов 20
Метки нет (Все метки)
У меня случилось что-то вроде парадокса. Прогал я в Eclipse (у него компилятор MinGW, отладчик GDB), напрогал выложенную ниже программу. Компилирую ее, кладу рядом с бинарником файл test.txt с каким-нибудь текстом. Запускаю. В консоли выводится содержимое текстового файла, который лежит рядом. Далее начинаю отлаживать программу. При отладке выясняется, что самый первый цикл в программе - бесконечный. А операции вывода на консоль следуют после бесконечного цикла. Следовательно вопрос: как можно пройти через бесконечный цикл ? Пробовал также Code::Blocks (у него такой-же компилятор и дебагер), с ним те-же результаты.
0
|
31.10.2009, 12:30 | |
Ответы с готовыми решениями:
20
Можно ли сделать бесконечный цикл с while, используя тип bool? Бесконечный цикл с повторением через промежуток времени Как можно вывести задачу через цикл for Как сделать бесконечный цикл? |
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
||||||
31.10.2009, 12:58 [ТС] | 3 | |||||
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
|
31.10.2009, 13:30 [ТС] | 5 |
Ставлю брейкпоинт после цикла. Запускаю. До брейпоинта выполнение не доходит. CPU нагружается на 100%. Приходится убивать процесс из диспетчера задач.
Пробовал отлаживать построчно. Замучился нажимать клавишу F7.... В моем файле всего 7 букв
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
||||||
31.10.2009, 15:07 [ТС] | 7 | |||||
Похоже так оно и есть. Сделал такой код:
Код
0 1 2 3 4 5 6 7 8 a&nythingg Что мне делать ? Отлаживать дебагер ?
0
|
31.10.2009, 15:19 | 8 |
Учиться отлаживаться без дебаггера. Или установить более свежий, потому как есть подозрение, что там маненько устаревший. Для порядку ещё поставь печать того, что прочлось из файла. Особой пользы это не принесёт, но по крайней мере будет понятно, отладчик своей работой портить непосредственный чтения из файла или feof
Добавлено через 1 минуту Ещё попробуй из цикла удалить "ilist.push_back(c);", может с этим что-то не так
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
||||||
31.10.2009, 15:42 [ТС] | 9 | |||||
Не подействовало
Все равно что читать с закрытыми глазами. GDB у меня свежайший. Вчера скачал. Сделал я так:
Код
a n y t h i n g g a&nythingg И еще одна зацепка. Если из IDE Code::Blocks запустить прогу командой Build=>Run, то будет бесконечный цикл. И выводит только знаки переноса строк, буквы не выводить вообще. Так что дело может не в GDB
0
|
31.10.2009, 15:57 | 10 | |||||
Я 99% отладки делаю при помощи печатей без всяких отладчиков. 0.99% - запуск отладчика для того, чтобы понять, в какой точке программа фатально навернулась. Оставшиеся 0.01% - это тяжёлые случаи навроде того, когда выход за границу массива испортил данные, а проявляется это очень далеко от точки возникновения ошибки. Но такие ситуации у меня возникают всё реже и реже, т.к. их предупреждают средства статического контроля (ASSERT'ы) в критических или опасных местах кода
ТОгда появни в двух словах, а как ДО этого ты запускал из отладчика? Я почему-то думал, что с отладчиком и без отладчика ты запускал один и тот же бинарник Добавлено через 9 минут Кстати, последний символ у тебя печатается два раза. А это означает, что ты неправильно работаешь с файлом Экспериментальным путём получилось, что вот такой цикл правильно считывает нужное количество символов
1
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
|
31.10.2009, 16:43 [ТС] | 11 |
Поясню варианты которые я пробовал.
1) Запускать exe`шник из Виндового Проводника. Двойным щелчком по exe`шнику. Работает нормально. Тоесть не зацикливается. Но выводит два раза букву g 2) Запускать из IDE. Щелчком по меню Build=>Run. Работает НЕ нормально. Зацикливается. Выводит только знаки переноса строки \n 3) Дебажить, тоесть выполнять построчно. Работает НЕ нормально. Зацикливается. Выводит бесконечно столбиком знак | Зачем так принципиально ? С отладчиком ведь гораздо удобнее, если он работает нормально Вот результаты: 1) Запускать exe`шник из Виндового Проводника. Двойным щелчком по exe`шнику. Работает нормально. Тоесть не зацикливается. Выводит один раз букву g как надо 2) Запускать из IDE. Щелчком по меню Build=>Run. Работает НЕ нормально. Зацикливается. Выводит только знаки переноса строки \n 3) Дебажить, тоесть выполнять построчно. Работает НЕ нормально. Зацикливается. Выводит бесконечно столбиком знак |
0
|
31.10.2009, 17:07 | 12 |
Блин, я совсем забыл, что ты под виндами... Просто под виндами и юниксами разные принципы работы отладчика. Как вариант попробуй статическую линкову (может отладчик коряво в динамическими приложениями под виндой работает. И не причина ли в том, что отлаживаешь Relese сборку?
На мой взгляд печатями гораздо удобнее. Та за одну секунду получаешь всю трассу работы программы, в то время как в отладчике проковыряешь полдня. Не говоря уж о том, что не зависишь от наличия отладчика. Но речь не об этом
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
|
31.10.2009, 17:25 [ТС] | 13 |
С этим все в порядке. Сборка Debug
Это как сделать ? P.S. Я в данной проге Qt не использую
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
|
31.10.2009, 18:29 [ТС] | 15 |
Очень возможно, что дело не в дебагере т.к. при запуске из IDE прога тоже нормально работать не хочет. Отсюда вопрос: чем запуск из IDE отличается от запуска из Виндовсного Проводника ?
P.S. В Eclipse те-же самые проблемы что и в Code::Blocks
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
|||||||||||
31.10.2009, 19:48 [ТС] | 17 | ||||||||||
Да ! Файл не открывается при дебаге и при запуске из IDE.
Сделал так: Заменил:
Блин, зря я пренебрегал проверкой успешности открытия файла.
0
|
3148 / 368 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
||||||
31.10.2009, 20:32 [ТС] | 19 | |||||
Функцию, которая может узнать текущий каталог, я нашел только для С++ Билдера. Тогда поступил по другому. Вставил такою строчку в исходник:
C:\Documents and Settings\RNT\My Documents\Parser\Parser А exe`шник лежит в папке: C:\Documents and Settings\RNT\My Documents\Parser\Parser\bin\Debug При дебаге и при запуске из IDE, текущей папкой считается папка, в которой лежит исходник. Женя, спасибо тебе за помощь !
0
|
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960
|
|
06.11.2009, 13:43 | 20 |
а не могла ли быть (еще) проблема в том, что ты открывал файл fstream - без указания опций???
0
|
06.11.2009, 13:43 | |
06.11.2009, 13:43 | |
Помогаю со студенческими работами здесь
20
Бесконечный цикл (как избежать?) как создать бесконечный цикл Как создать бесконечный цикл как засунуть условно-бесконечный цикл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |