Проблемы c g++ в mingw-codeblocks
От: LaptevVV Россия  
Дата: 02.11.11 05:57
Оценка:
Лабаю одну и ту же прогу в VS 2010 b Code::Blocks 10.05 c MinGW.
• Microsoft Visual Studio 2010 со штатным компилятором среды;
• Code::Blocks версии 10.05 с пакетом MinGW и компилятором g++ версии 4.6.1.
На ноуте, с которого сейчас пишу, прога работает совершенно одинаково (разве что мигвешная побыстрее).
На домашнем компе до некоторого момента тоже работала совершенно одинаково.
Но потом случилось интересное кино: мингвешная версия перестала работать с вещественными числами.
Вместо нормальных значений выдаются нули. Целые при этом выдаются совершенно нормально.
Из студии та же прога работает совершенно нормально. На ноуте в обоих средах все работает совершенно нормально.
Отключил все оптимизации — результат не изменился.
Переустановил Code::Blocks — не помогает...
Ноут —

Имя ОС Microsoft Windows XP Professional
Версия 5.1.2600 Service Pack 3 Сборка 2600

Изготовитель ASUSTeK Computer Inc.
Модель X51RL
Тип Компьютер на базе X86
Процессор x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1862 МГц
Полный объем физической памяти 2 048,00 МБ
Доступно физической памяти 944,41 МБ
Всего виртуальной памяти 2,00 ГБ
Доступно виртуальной памяти 1,96 ГБ

Домашний компьютер:

Проверка проводилась на следующей платформе:
• Процессор Intel® Core™ i3 CPU 530 @2.93, индекс производительности 6.9;
• Оперативная память 4 Гб, индекс производительности 5.9;
• Операционная система Windows 7 Максимальная, 64-разрядная.

Трансляция выполнялась в 32-битном режиме.
Операционка влияет ? Но до определенного момента все работало
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Проблемы c g++ в mingw-codeblocks
От: LaptevVV Россия  
Дата: 02.11.11 06:30
Оценка:
Добавлю.
Прога получает из командной строки параметры.
Так вот уже при переводе параметра функцией atof() происходит совершенно непонятная весчь:
вместо нормального значения 0.0 выдается длиннющее значение в 1500-2000 цифр.
Как будто из памяти выводится строки и там нет завершающего нуля.
Еще раз повторю, что на ноуте обе проги работают совершенно одинаково.
И на домашнем компе тот же текст в VS 2010 работает совершенно нормально.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Проблемы c g++ в mingw-codeblocks
От: Тот кто сидит в пруду Россия  
Дата: 02.11.11 10:28
Оценка: 4 (2)
Здравствуйте, LaptevVV, Вы писали:

LVV>Добавлю.

LVV>Прога получает из командной строки параметры.
LVV>Так вот уже при переводе параметра функцией atof() происходит совершенно непонятная весчь:
LVV>вместо нормального значения 0.0 выдается длиннющее значение в 1500-2000 цифр.
LVV>Как будто из памяти выводится строки и там нет завершающего нуля.
LVV>Еще раз повторю, что на ноуте обе проги работают совершенно одинаково.
LVV>И на домашнем компе тот же текст в VS 2010 работает совершенно нормально.

Практика показывает, что гадать и сравнивать обычно не имеет смысла. Куда полезнее посмотреть отладчиком, что конкретно поломалось и потом уже думать, как это могло произойти.
PS: atof не выводит строки.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: Проблемы c g++ в mingw-codeblocks
От: LaptevVV Россия  
Дата: 02.11.11 18:14
Оценка:
Здравствуйте, Тот кто сидит в пруду, Вы писали:

ТКС>Здравствуйте, LaptevVV, Вы писали:


LVV>>Добавлю.

LVV>>Прога получает из командной строки параметры.
LVV>>Так вот уже при переводе параметра функцией atof() происходит совершенно непонятная весчь:
LVV>>вместо нормального значения 0.0 выдается длиннющее значение в 1500-2000 цифр.
LVV>>Как будто из памяти выводится строки и там нет завершающего нуля.
LVV>>Еще раз повторю, что на ноуте обе проги работают совершенно одинаково.
LVV>>И на домашнем компе тот же текст в VS 2010 работает совершенно нормально.
ТКС>Практика показывает, что гадать и сравнивать обычно не имеет смысла. Куда полезнее посмотреть отладчиком, что конкретно поломалось и потом уже думать, как это могло произойти.
ТКС>PS: atof не выводит строки.
Понятно. Значит, никто не сталкивался.
В том-то и дело, что отладчик здесь не при делах.
Вот смотрите: один и тот же текст программы.
1. в Студии 2010 на ноуте — работает корректно
2. С кодеблоксе на ноуте — работает нормально.
3. В студии 2010 на домашнем — работает нормально
4. В кодеблоксе на домашнем — глючит.
Разница — в операционной системе.
PS. Я не вывожу строку функцией atof(). Она используется для перевода одного из параметров командной строки. После перевода при выводе уже из переменной значения выводится 1500-2000 цифр (как строка без нуля).
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Проблемы c g++ в mingw-codeblocks
От: Тот кто сидит в пруду Россия  
Дата: 02.11.11 18:23
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>В том-то и дело, что отладчик здесь не при делах.


Отладчик — это, как обычно, инструмент, чтобы зря не гадать.

LVV>Вот смотрите: один и тот же текст программы.

LVV>1. в Студии 2010 на ноуте — работает корректно
LVV>2. С кодеблоксе на ноуте — работает нормально.
LVV>3. В студии 2010 на домашнем — работает нормально
LVV>4. В кодеблоксе на домашнем — глючит.
LVV>Разница — в операционной системе.

Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать.

LVV>PS. Я не вывожу строку функцией atof(). Она используется для перевода одного из параметров командной строки. После перевода при выводе уже из переменной значения выводится 1500-2000 цифр (как строка без нуля).


Так непосредственно после atof шестнадцатиричное представление нормальное или как? 2000 цифр — это ни о чем. float — не черный ящик, ее и без перевода в строку проверить можно.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[5]: Проблемы c g++ в mingw-codeblocks
От: LaptevVV Россия  
Дата: 02.11.11 19:18
Оценка:
Здравствуйте, Тот кто сидит в пруду, Вы писали:

LVV>>В том-то и дело, что отладчик здесь не при делах.

ТКС>Отладчик — это, как обычно, инструмент, чтобы зря не гадать.
ТКС>Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать.
Тогда вопрос: каким отладчиком?
WinDBG? Или есть более серьезные?
Или GNU dbg?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Проблемы c g++ в mingw-codeblocks
От: Abyx Россия  
Дата: 02.11.11 19:29
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Тот кто сидит в пруду, Вы писали:


LVV>>>В том-то и дело, что отладчик здесь не при делах.

ТКС>>Отладчик — это, как обычно, инструмент, чтобы зря не гадать.
ТКС>>Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать.
LVV>Тогда вопрос: каким отладчиком?
LVV>WinDBG? Или есть более серьезные?
LVV>Или GNU dbg?

странное такое видеть, я даже несколько шокирован %)
как вы вообще можете без отладчика программированием заниматься?
не, я понимаю что в 99% случаях отладчик не нужен, но для 1% им надо уметь пользоваться

> каким отладчиком?

а каким вы умеете? можно и отладчиком MSVC, в окне дизасма.
я бы использовал OllyDbg, но это исключительно дело привычки.

на всякий случай, напомню, что точку останова можно добавить функцией DebugBreak() или инструкцией int3, хотя *(int*)0 = 0; тоже работает.

вообще кроме запуска под отладчиком можно еще дизасм посмотреть чем-нибудь, не запуская.
In Zen We Trust
Re[6]: Проблемы c g++ в mingw-codeblocks
От: Тот кто сидит в пруду Россия  
Дата: 02.11.11 19:38
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>>>В том-то и дело, что отладчик здесь не при делах.

ТКС>>Отладчик — это, как обычно, инструмент, чтобы зря не гадать.
ТКС>>Вывод простой — чето на домашнем поломалось. В mingw, операционке или каком-нибудь совсем неочевидном месте. Надо посмотреть отладчиком, в кодеблоксе на домашнем, в какой момент что именно идет не так. И потом уже думать.
LVV>Тогда вопрос: каким отладчиком?
LVV>WinDBG? Или есть более серьезные?
LVV>Или GNU dbg?

Когда я последний раз пользовался mingw, а это было довольно давно, несколько лет назад, его формат виндовые отладчики не понимали. Так что если с тех пор ничего не изменилось, то пользоваться придется gdb из комплекта. Хоть он и уродский.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: Проблемы c g++ в mingw-codeblocks
От: LaptevVV Россия  
Дата: 02.11.11 20:19
Оценка:
Здравствуйте, Abyx, Вы писали:

A>странное такое видеть, я даже несколько шокирован %)

A>как вы вообще можете без отладчика программированием заниматься?
Молча, конечно...
A>не, я понимаю что в 99% случаях отладчик не нужен, но для 1% им надо уметь пользоваться
A>а каким вы умеете? можно и отладчиком MSVC, в окне дизасма.
Да любым умею...
Пока в студии работаешь, используешь встроенный отладчик, которого для моих задач хватает за глаза.
Да и "хитрых" ошибок я давно не делаю, поскольку давно проповедую принцип KISS... ^)
>> каким отладчиком?
A>я бы использовал OllyDbg, но это исключительно дело привычки.
А вот за это — спасибо.
A>на всякий случай, напомню, что точку останова можно добавить функцией DebugBreak() или инструкцией int3, хотя *(int*)0 = 0; тоже работает.
Ну, про архитектуру Intela мне известно. И книги Джона Роббинса у меня тоже есть...
A>вообще кроме запуска под отладчиком можно еще дизасм посмотреть чем-нибудь, не запуская.
Я думаю, что дело не в программе, а в окружении. Поэтому дизассемблировать и копаться в коде не вижу смысла...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Проблемы c g++ в mingw-codeblocks
От: ArtDenis Россия  
Дата: 03.11.11 04:14
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Тогда вопрос: каким отладчиком?


Тем, который идёт с mingw и фронтенд для которого встроен в code::blocks. Т.е. просто запускаете и отлаживаетесь
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.