Программа не работает при некоторых оптимизациях компилятора
От: Manticore США http://github.com/fjarri
Дата: 17.10.06 10:52
Оценка:
Ситуация такая: есть некая программа, которая в процессе работы забивает map<string, string> всякой инфой, при этом отжирая порядка 200 метров памяти. Релизная и дебажная сборки из-под VS работают нормально. Сборка из командной строки вида "cl /O2 program.cpp" вылетает. Как вообще можно отловить подобного рода ошибку? Откуда копать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Программа не работает при некоторых оптимизациях компиля
От: Сергей Мухин Россия  
Дата: 17.10.06 12:15
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Ситуация такая: есть некая программа, которая в процессе работы забивает map<string, string> всякой инфой, при этом отжирая порядка 200 метров памяти. Релизная и дебажная сборки из-под VS работают нормально. Сборка из командной строки вида "cl /O2 program.cpp" вылетает. Как вообще можно отловить подобного рода ошибку? Откуда копать?


здесь
Автор(ы): Dr. Joseph M. Newcomer
Дата: 18.06.2001
Статья посвящена проблемам перехода с Debug-версии на Release-версию. Рассматриваются
типичные ошибки, которые могут не проявляться в отладочной версии, но проявляются в финальной.
Обсуждается вопрос "ошибок компилятора" и вопросы необходимости оптимизации и ее побочные эффекты.
В последней редакции добавлен раздел посвященный проблеме совместимости динамических библиотек.
---
С уважением,
Сергей Мухин
Re[2]: Программа не работает при некоторых оптимизациях комп
От: Manticore США http://github.com/fjarri
Дата: 17.10.06 13:35
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>здесь
Автор(ы): Dr. Joseph M. Newcomer
Дата: 18.06.2001
Статья посвящена проблемам перехода с Debug-версии на Release-версию. Рассматриваются
типичные ошибки, которые могут не проявляться в отладочной версии, но проявляются в финальной.
Обсуждается вопрос "ошибок компилятора" и вопросы необходимости оптимизации и ее побочные эффекты.
В последней редакции добавлен раздел посвященный проблеме совместимости динамических библиотек.


Это я читал, но:
1. Я попробовал скомпилировать и слинковать в командной строке с _теми же_ настройками, что и в настройках проекта. Результат — все равно вылетает. Вопрос в том, чем же отличается такая сборка от проводимой VS'ом?
2. Место вылета не зависит от входных данных, а зависит от размера упомянутой мапы — т.е. проблема где-то в выделении памяти.
3. В программе не используется new, приведение типов, указатели, т.е. вылетает скорее всего где-то внутри stl функций.
4. Решил проверить, при каком же размере мапы происходит вылет, поставил перед записью в нее cout с выведением ее размера. Программа не вылетела.

Вот такая мистика.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Программа не работает при некоторых оптимизациях комп
От: Peregrin  
Дата: 17.10.06 14:22
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>здесь
Автор(ы): Dr. Joseph M. Newcomer
Дата: 18.06.2001
Статья посвящена проблемам перехода с Debug-версии на Release-версию. Рассматриваются
типичные ошибки, которые могут не проявляться в отладочной версии, но проявляются в финальной.
Обсуждается вопрос "ошибок компилятора" и вопросы необходимости оптимизации и ее побочные эффекты.
В последней редакции добавлен раздел посвященный проблеме совместимости динамических библиотек.


M>Сборка из командной строки вида "cl /O2 program.cpp" вылетает.


M>Это я читал, но:

M>1. Я попробовал скомпилировать и слинковать в командной строке с _теми же_ настройками, что и в настройках проекта. Результат — все равно вылетает. Вопрос в том, чем же отличается такая сборка от проводимой VS'ом?

При компиляции из IDE компилятору скорее всего передаются еще ключи кроме /O2, например /EHsc по умолчанию включен в проекте, это тоже может влиять.
Re[4]: Программа не работает при некоторых оптимизациях комп
От: Manticore США http://github.com/fjarri
Дата: 17.10.06 14:28
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>Здравствуйте, Manticore, Вы писали:


M>>1. Я попробовал скомпилировать и слинковать в командной строке с _теми же_ настройками, что и в настройках проекта. Результат — все равно вылетает. Вопрос в том, чем же отличается такая сборка от проводимой VS'ом?


P>При компиляции из IDE компилятору скорее всего передаются еще ключи кроме /O2, например /EHsc по умолчанию включен в проекте, это тоже может влиять.


Я же говорю, с теми же настройками. И EHsc в том числе.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Программа не работает при некоторых оптимизациях комп
От: Сергей Мухин Россия  
Дата: 17.10.06 15:14
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>здесь
Автор(ы): Dr. Joseph M. Newcomer
Дата: 18.06.2001
Статья посвящена проблемам перехода с Debug-версии на Release-версию. Рассматриваются
типичные ошибки, которые могут не проявляться в отладочной версии, но проявляются в финальной.
Обсуждается вопрос "ошибок компилятора" и вопросы необходимости оптимизации и ее побочные эффекты.
В последней редакции добавлен раздел посвященный проблеме совместимости динамических библиотек.


M>Это я читал, но:

M>1. Я попробовал скомпилировать и слинковать в командной строке с _теми же_ настройками, что и в настройках проекта. Результат — все равно вылетает. Вопрос в том, чем же отличается такая сборка от проводимой VS'ом?

этого не может быть. проверь содержимое: а) .exe b) .obj
мб на какой-то файл у тебя свои настройки, которые перекрывают проект

M>2. Место вылета не зависит от входных данных, а зависит от размера упомянутой мапы — т.е. проблема где-то в выделении памяти.

M>3. В программе не используется new, приведение типов, указатели, т.е. вылетает скорее всего где-то внутри stl функций.
M>4. Решил проверить, при каком же размере мапы происходит вылет, поставил перед записью в нее cout с выведением ее размера. Программа не вылетела.

это быстрей всего пропись памяти. попробуй средства, которые проверяют это.

M>Вот такая мистика.


если это стабильно и воспроизводится, то какая тут мистика?
---
С уважением,
Сергей Мухин
Re: Программа не работает при некоторых оптимизациях компиля
От: Manticore США http://github.com/fjarri
Дата: 17.10.06 15:30
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Ситуация такая: есть некая программа, которая в процессе работы забивает map<string, string> всякой инфой, при этом отжирая порядка 200 метров памяти. Релизная и дебажная сборки из-под VS работают нормально. Сборка из командной строки вида "cl /O2 program.cpp" вылетает. Как вообще можно отловить подобного рода ошибку? Откуда копать?


Оказалось, я немного не так понял ситуацию. Релизная сборка, сделанная в VS работает только при запуске из самой VS; если ее запускать, как отдельную программу, она тоже вылетает. Что это может быть?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Программа не работает при некоторых оптимизациях комп
От: Manticore США http://github.com/fjarri
Дата: 17.10.06 15:49
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:


СМ>это быстрей всего пропись памяти. попробуй средства, которые проверяют это.


Не понял первой части фразы, поясните, пожалуйста.

M>>4. Решил проверить, при каком же размере мапы происходит вылет, поставил перед записью в нее cout с выведением ее размера. Программа не вылетела.

M>>Вот такая мистика.
СМ>если это стабильно и воспроизводится, то какая тут мистика?

"Мистика" относилось к 4-му пункту ) Просто мне было непонятно, как это может влиять на работу прграммы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Программа не работает при некоторых оптимизациях комп
От: Сергей Мухин Россия  
Дата: 17.10.06 16:25
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Оказалось, я немного не так понял ситуацию.

а мы ее почти уже разрешили

M>Релизная сборка, сделанная в VS работает только при запуске из самой VS; если ее запускать, как отдельную программу, она тоже вылетает. Что это может быть?


например разные текущие оглавления, мб разные environment. разные параметры,
---
С уважением,
Сергей Мухин
Re[5]: Программа не работает при некоторых оптимизациях комп
От: Сергей Мухин Россия  
Дата: 17.10.06 16:36
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Здравствуйте, Сергей Мухин, Вы писали:



СМ>>это быстрей всего пропись памяти. попробуй средства, которые проверяют это.


M>Не понял первой части фразы, поясните, пожалуйста.


есть много программных средств помогающие при ошибках. например devpartner

M>>>4. Решил проверить, при каком же размере мапы происходит вылет, поставил перед записью в нее cout с выведением ее размера. Программа не вылетела.

M>>>Вот такая мистика.
СМ>>если это стабильно и воспроизводится, то какая тут мистика?

M>"Мистика" относилось к 4-му пункту ) Просто мне было непонятно, как это может влиять на работу прграммы.


э! это что у вас впервые? добавление печати меняет результат! что тут мистического? это, к сожалению, бывает
---
С уважением,
Сергей Мухин
Re[6]: Программа не работает при некоторых оптимизациях комп
От: Manticore США http://github.com/fjarri
Дата: 17.10.06 17:41
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, Manticore, Вы писали:


M>>Здравствуйте, Сергей Мухин, Вы писали:



СМ>>>это быстрей всего пропись памяти. попробуй средства, которые проверяют это.

M>>Не понял первой части фразы, поясните, пожалуйста.
СМ>есть много программных средств помогающие при ошибках. например devpartner

Первая часть фразы — "это быстрей всего пропись памяти"

А девпартнер может проверить отдельно запускаемую прогу? Как я уже говорил, из-под VS все нормально работает, и девпартнер тоже ничего подохрительного не находит. Кроме того, он ужасно тормозит работу программы; если так баг появляется где-то через минуту, то с ним до этого места надо ждать минут 20-30, а после этого оказывается, что все работает и бага нету.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Программа не работает при некоторых оптимизациях комп
От: vvotan Россия  
Дата: 18.10.06 05:47
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Здравствуйте, Manticore, Вы писали:


M>>Ситуация такая: есть некая программа, которая в процессе работы забивает map<string, string> всякой инфой, при этом отжирая порядка 200 метров памяти. Релизная и дебажная сборки из-под VS работают нормально. Сборка из командной строки вида "cl /O2 program.cpp" вылетает. Как вообще можно отловить подобного рода ошибку? Откуда копать?


M>Оказалось, я немного не так понял ситуацию. Релизная сборка, сделанная в VS работает только при запуске из самой VS; если ее запускать, как отдельную программу, она тоже вылетает. Что это может быть?

Скорее всего из-за разного текущего каталога
--
Sergey Chadov

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Программа не работает при некоторых оптимизациях комп
От: Manticore США http://github.com/fjarri
Дата: 18.10.06 07:06
Оценка:
Здравствуйте, vvotan, Вы писали:

V>Скорее всего из-за разного текущего каталога


Вы слишком плохо обо мне думаете ) Тем более, я, вроде, говорил, что вылет происходит не сразу, а где-то через минуту работы.

Багу я все же нашел. Приняв за базис свою первоначальную гипотезу о глюках при выделении памяти, использовал вместо стандартного new другой аллокатор, после этого программа стала вылетать и в VS через минуту работы с std::out_of_range ) Ну а такая ошибка все же легко ищется.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Программа не работает при некоторых оптимизациях компиля
От: trophim Россия  
Дата: 18.10.06 20:30
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Ситуация такая: есть некая программа, которая в процессе работы забивает map<string, string> всякой инфой, при этом отжирая порядка 200 метров памяти. Релизная и дебажная сборки из-под VS работают нормально. Сборка из командной строки вида "cl /O2 program.cpp" вылетает. Как вообще можно отловить подобного рода ошибку? Откуда копать?


А при поиощи Intel C++ можете пересобрать программу? Уже много раз здесь говорили про ключ O2. Не гонялись бы вы за ним... Попробуйте O1. Будет ли глючить? Если компилятор глючит, то остается только при помощи бубна поплясать и определить при каких условиях все идет нормально и молиться о том, что вов всех других местах все идет нормально.

Я тоже вот недавно собирал релиз (O2). Чегой-то изменил немножко — программу всю переклинило нафик (причем дебаг и релиз при O1 работают как часы). При том, что 5 минут назад с этим же O2 вс было нормально. Чего там компилятору вдруг не понравилось я не знаю. Такие вот пироги.
[EOF]
Let it be! — Давайте есть пчелу!
Re: А у меня наоборот
От: Roman Odaisky Украина  
Дата: 19.10.06 14:51
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Релизная и дебажная сборки из-под VS работают нормально. Сборка из командной строки вида "cl /O2 program.cpp" вылетает.


У меня тоже было такое. Собирал cURL++. При сборке с помощью IDE (MSVS) попытка использования библиотеки давала ошибки линкера, а сборка с помощью nmake дала полностью рабочую библиотеку! Причем проблемная функция жила в файле .inl, который включался только в один .hpp, который включался исключительно в код юзера (т. е. .lib от него не зависела!).

Something has rotten in the state of Redmond?
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.