Russian Qt Forum

Qt => Общие вопросы => Тема начата: AntonUfo от Октябрь 27, 2011, 16:49



Название: Вылетает программа при релизе, что делать ?
Отправлено: AntonUfo от Октябрь 27, 2011, 16:49
Мучаюсь вот с чем, если запускаю программу в дебагге под компилятором, все нормально, все работает, а вот как только делаю релиз, то работает, то нет - растет память до предела и программа вылетает, возникает надпись на экране о ошибке, ни номера ошибки ни намек какого почему растет память нет. Что посоветуете ?


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: Пантер от Октябрь 27, 2011, 16:51
Пересмотреть код и исправить ошибки.


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: AntonUfo от Октябрь 27, 2011, 16:54
Пересмотреть код и исправить ошибки.

пасиб конечно за непрозрачный намек, но если бы не бился два дня уже не написал бы на форум....

PS: конструктивные советы приветствуются.....


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: kambala от Октябрь 27, 2011, 17:01
могу посоветовать нанять телепата для пользователей форума, желающих тебе помочь


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: Янковский Александр от Октябрь 27, 2011, 17:24
могу посоветовать нанять телепата для пользователей форума, желающих тебе помочь
ну ты злой какой-то... человек спрашивает, может чего стандартного багового кто что видел или слышал...

Раз память растет, значит где-то в потоках засада.
Например, ситуация: данные приходят по сети и складываются в очередь на обработку, а сам поток, разбирающий очередь по какой-то причине стопарнулся, вот и рост пямяти пошел...

Ну а если конкретно, то посмотри в сторону линкуемых сторонних библиотек. Для релиза и дебага они могут и отличаться


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: kambala от Октябрь 27, 2011, 17:36
трудно делать предположения при нулевой информации. может, например, иметь место бесконечный цикл или рекурсия (криво заданное условие окончания), может что-то загрузиться не может, может...


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: LisandreL от Октябрь 27, 2011, 17:40
В выводе приложения какой код завершения приложения?
В рамках телепатии - проблемы неинициализированных переменных.


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: GreatSnake от Октябрь 27, 2011, 18:10
Если под линукс - valgrind тебе поможет.


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: Igors от Октябрь 27, 2011, 19:10
PS: конструктивные советы приветствуются.....
1) Отлаживаться с включенной оптимизацией (пусть отладчик и будет врать, но разобраться часто удается)

2)
но если бы не бился два дня уже не написал бы на форум....
возникает надпись на экране о ошибке, ни номера ошибки ни намек какого почему растет память нет.
Так что, за 2 дня так и не удалось локализоваться окружив вылет консольными сообщениями?  :)

3)
пасиб
Когда двухсотый юноша показывает точно такое же ординарное остроумие - это капитально отбивает охоту отвечать  :)


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: thechicho от Октябрь 27, 2011, 22:02
это не ординарное остроумие, а современный сленг. привыкай, дальше будет "хуже" (для тебя)  :D


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: AntonUfo от Октябрь 27, 2011, 22:06
замордовали прямо....  ???

попытаюсь еще два раза:
Программа в дебагге под компилятором работает нормально, а вот как только делаю релиз, память растет. Как правильно посмотреть почему ?
Повторюсь, точек останова наставить не могу и посмотреть, т.к. релиз, при запуске Debug все работает и ошибок невидно....
Мне кажется  что для нормального "без выпендрежа" ответа телепатом быть не надо.


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: Пантер от Октябрь 27, 2011, 22:17
Тут может быть СТОЛЬКО ньюансов, что ответа дать просто невозможно. Лучшее решение - пересмотр кода и вывод в лог кри тических участков.


Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: Igors от Октябрь 28, 2011, 01:48
Повторюсь, точек останова наставить не могу и посмотреть, т.к. релиз
Не переключайтесь между debug/release, они отличаются очень многим. Вместо этого в установках release включите генерацию отладки - это надо проверить в первую очередь. Если не повезет, попробуйте наоборот, завалить debug, напр. подключив ему все либы из release.

Если не знаете как сделать окно консоли и печатать в нем - спрашивайте, и стесняться нечего (в конце-концов на Вындоуз это не так просто  :))



Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: Bepec от Октябрь 28, 2011, 07:11
Скорее всего у тебя где то портится память/разрушается стек/выход за пределы массив/прочая гадость.

Как с этим бороться?

Выложить текст программы, или же самому просмотреть ее полностью, ставя как ни странно, контрольные сообщения, проверяя всевозможные значения.

У меня такая проблема была во вспомогательном классе, где выходило за пределы массива всего на 3 элемента :)

Проблема появилась только через неделю эксплуатации, когда прога уже разошлась на тестирование :)

Причем поведение было веселое - отжор памяти до ровно половины имеющейся, закрытие ГУИ составляющей и продолжение работы в *фоновом* режиме с потреблением 2 мб памяти :)

PS искал неделю, не меньше, пришлось весь проект перебирать.



Название: Re: Вылетает программа при релизе, что делать ?
Отправлено: GreatSnake от Октябрь 28, 2011, 07:52
Прогони через:
  • Dr. Memory (http://code.google.com/p/drmemory/)
  • D.U.M.A. (http://duma.sourceforge.net/)
  • Application Verifier (http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx)
  • VMMap (http://technet.microsoft.com/en-us/sysinternals/dd535533)
  • CheckPointer (http://www.semanticdesigns.com/Products/MemorySafety/)
  • Memory Validator (коммерческий, но есть eval) (http://www.softwareverify.com/cpp-memory.php)