Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > странная ошибка


Автор: mrgloom 25.1.2013, 17:13
программа работала нормально, потом я видимо что то поменял и теперь дебаг работает нормально, а в релизе не выводятся картинки и окно и кнопки иногда бывают как будто застывшими. 

ошибок не происходит и ничего не падает.

что это может быть?


Автор: Alca 25.1.2013, 20:36
все что угодно

Автор: Фантом 25.1.2013, 23:20
В принципе, действительно все что угодно, но чаще всего источником подобных проблем является некорректная работа с памятью (используете неинициализированные переменные, обращаетесь к несуществующим элементам массива, забываете выделить память по указателю или раньше времени ее освобождаете и т.п.). В debug и release "дырка" попадает либо в неиспользуемый (формально) участок памяти (и тогда все работает), либо накладывается на что-то нужное (и тогда результат непредсказуем).

Автор: Alca 26.1.2013, 00:55
Вот загон с эссертом:
Код

assert(true == someFoo());

в релизе этотого кода не будет.
А так код показывай.

Автор: mrgloom 28.1.2013, 10:52
там что то похоже именно с интерфейсом с MFC или с GDI связанно.

еще выводит такое

Цитата

Loaded  ...\GdiPlus.dll
The thread 'Win32 Thread' (0xc5c) has exited with code 1 (0x1).



+ в дебаге 

Цитата

Warning: destroying an unsaved document.


так что смахивает и на мемори лик

Автор: Alca 28.1.2013, 15:35
это смахивает на гадание на кофейной гуще

Автор: Earnest 29.1.2013, 09:11
Цитата(mrgloom @  28.1.2013,  11:52 Найти цитируемый пост)
Warning: destroying an unsaved document.

Поищи в недрах MFC, вот и узнаешь, что это. Насколько я помню, это ровно то, что написано: разрушается документ, у которого взведен флажок модификации. Мемори-лики проявляются в дебаге по другому.
А вообще Alca прав - гадаешь на кофейной гуще. А нужен системный подход: сначала зафиксировать ошибку, потом отладить. В релизе это не очень удобно, но есть OutputDebugString (которая, несмотря на им, работает и в релизе). Можно поробовать собрать релиз с минимальной отладосной информацией, чтобы подебажить его в среде. Но эффект может пропасть. Кроме того, релиз может плохо вести себя только вне IDE; на это есть утилитка от sysinternals, которая мониторит вывод OutputDebugString.
И первым делом проверь утечку GDI ресурсов.

Автор: Alca 29.1.2013, 13:41
Цитата

И первым делом проверь утечку GDI ресурсов.

http://forum.vingrad.ru/forum/topic-203704.html

Автор: volatile 30.1.2013, 00:20
часто UB-шные выражения, компилируюцца по разному в дебаге и релизе.
В какой-то студии было, кажецца:
Код

int a,b;
//...
a = b++ + b++;

а - имело разное значение в дебаге и релизе.

А UB-шных выражений (спасибо стандарту), немеряно, так что ...  smile 

Автор: mrgloom 1.2.2013, 15:08
вообщем проблема была из-за того что HPEN  удалялся ,а потом его настройки записывались в ини файл(соответственно мусор), и потом когда всё читалось обратно, GDI от некорректного HPEN не хотел выводить всё нормально, при этом нчиего не падало. 

а зависание окна от другого было, точнее оно было просто неактивно.



а насчёт утечек почитаю тоже полезно.



Автор: mrgloom 18.2.2013, 13:22
Цитата

Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_...\GdiPlus.dll'
The thread 'Win32 Thread' (0x230) has exited with code 1 (0x1).


на такой вывод в дебаге стоит обратить внимание?

GDI handlers в диспетчере смотрел вроде ничего не увеличивается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)