странная ошибка

 
0
 
C++
ava
mrgloom | 25.01.2013, 18:13
программа работала нормально, потом я видимо что то поменял и теперь дебаг работает нормально, а в релизе не выводятся картинки и окно и кнопки иногда бывают как будто застывшими.

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

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

Ответы (12)
ava
Alca | 25.01.2013, 20:36 #
все что угодно
ava
Фантом | 25.01.2013, 23:20 #
В принципе, действительно все что угодно, но чаще всего источником подобных проблем является некорректная работа с памятью (используете неинициализированные переменные, обращаетесь к несуществующим элементам массива, забываете выделить память по указателю или раньше времени ее освобождаете и т.п.). В debug и release "дырка" попадает либо в неиспользуемый (формально) участок памяти (и тогда все работает), либо накладывается на что-то нужное (и тогда результат непредсказуем).
ava
feodorv | 06.02.2013, 22:27 #
Цитата (Фантом @ 26.01.2013 @  00:20)

  неудачная попытка цитировать(((
  
ava
feodorv | 06.02.2013, 23:02 #
 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 
ava
Alca | 26.01.2013, 00:55 #
Вот загон с эссертом:

assert(true == someFoo());

в релизе этотого кода не будет.
А так код показывай.
ava
mrgloom | 28.01.2013, 10:52 #
там что то похоже именно с интерфейсом с MFC или с GDI связанно.

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

Цитата


Loaded  ...\GdiPlus.dll

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




+ в дебаге

Цитата


Warning: destroying an unsaved document.



так что смахивает и на мемори лик
ava
Alca | 28.01.2013, 15:35 #
это смахивает на гадание на кофейной гуще
ava
Earnest | 29.01.2013, 09:11 #
Цитата (mrgloom @  28.1.2013,  11:52 findReferencedText)
Warning: destroying an unsaved document.

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


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


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

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

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

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

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



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


ava
mrgloom | 18.02.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 в диспетчере смотрел вроде ничего не увеличивается.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить