Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ginger_Ministrel от Июнь 06, 2014, 10:46



Название: Программа рушится при закрытии через крестик
Отправлено: Ginger_Ministrel от Июнь 06, 2014, 10:46
Подскажите, господа, какие могут быть причины того, что одна и та же программа иногда завершается крахом, а иногда нормально? Крах происходит после срабатывания всех деструкторов, вне зависимости от того, что я делал или не делал на окне. Конкретный код привести не могу, потому что его много и совершенно непонятно, что в нем приводит к такому.

UPD: дебаггер выдает вот такую ошибку:
Cannot find user-level thread for LWP: generic error

Как я понял, это что-то связанное с проблемами совместимости. Но больше ничего понять пока не вышло.


Название: Re: Программа иногда рушится
Отправлено: Swa от Июнь 06, 2014, 10:58
99% что это результат обращения по нулевому указателю.


Название: Re: Программа иногда рушится
Отправлено: Ginger_Ministrel от Июнь 06, 2014, 10:59
Возможно. Но почему оно возникает от случая к случаю, а не стабильно?


Название: Re: Программа иногда рушится
Отправлено: OKTA от Июнь 06, 2014, 11:04
К сожалению, возможных причин уйма  :-\ Попробуй проанализировать через valgrind!


Название: Re: Программа иногда рушится
Отправлено: Figaro от Июнь 06, 2014, 11:11
Операционка? Компилятор?


Название: Re: Программа иногда рушится
Отправлено: Ginger_Ministrel от Июнь 06, 2014, 11:54
Figaro, CentOS 6.5, g++

Проблема вроде бы решилась заменой выхода через this->close() основного окна на qApp->exit( 0 ). Но остается непонятным, почему в той же программе не было такой проблемы на 16-й Федоре, а под Вендой я вообще не знал, что такая проблема существует.


Название: Re: Программа иногда рушится
Отправлено: Ginger_Ministrel от Июнь 06, 2014, 14:44
Все-таки иногда крах продолжает случаться по непонятным причинам.
Какие базовые моменты стоит проверить?


Название: Re: Программа иногда рушится
Отправлено: Ginger_Ministrel от Июнь 09, 2014, 10:04
Нашел момент, когда происходит крах - закрытие программы через стандартный крестик.
В принципе, можно переопределить closeEvent() у основного окна, но это костыль. Отчего такое может возникать? Что-то не чистится из памяти?


Название: Re: Программа рушится при закрытии через крестик
Отправлено: qate от Июнь 09, 2014, 10:09
логгируй работу программы в stderr


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Ginger_Ministrel от Июнь 09, 2014, 10:25
Логирую по дефолту. В каждой функции - вход и выход, в каждом констркуторе и деструкторе сообщение об окончании работы.
Крах происходит после успешного срабатывания всех деструкторов. Буквально на самой последней строчке программы.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: qate от Июнь 09, 2014, 11:04
комментируй код (окна, классы) и смотри когда падает - так обычно помогает
переопределял ли чтото типа qInstallMessageHandler ?


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Ginger_Ministrel от Июнь 09, 2014, 11:22
Переопределял только timerEvent() у одного виджета и contextMenuEvent() у другого вложенного.
Насчет комментирования - сейчас попробую прогнать, посмотрим, что получится.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Ginger_Ministrel от Июнь 09, 2014, 11:25
Есть один момент: интерфейс в основном сделан через дизайнер, то бишь, через подключение Ui.
Там есть какие-то моменты, которые могут рушить программу?

Явно что-то нехорошее происходит, связанное с closeEvent(), потому что при выходе через qApp->exit() все нормально.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: qate от Июнь 09, 2014, 12:29
Явно что-то нехорошее происходит, связанное с closeEvent(), потому что при выходе через qApp->exit() все нормально.

делай QApplication::exit в closeEvent


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Ginger_Ministrel от Июнь 09, 2014, 12:31
Я так и собираюсь делать. Но мне хочется все-таки докопаться до причины. Мало ли когда она еще вылезет, эта ошибка.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Bepec от Июнь 09, 2014, 12:54
Где то у тебя что-то рушится. Смотри все указатели, выход за границы массива.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Ginger_Ministrel от Июнь 09, 2014, 13:46
А почему все-таки динамически? То есть, я только что сидел и комментировал разные места кода, прогоняя после этого компиляцию с последующим выходом раз по десять. В итоге выяснилось, что программа выдает либо 0, либо крах чуть ли не рандомно.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Bepec от Июнь 09, 2014, 14:15
ммм... Тут надо начинать с азов.

При закрытии главного окна вызываются деструкторы всех детей.

Если у вас имеется потерянный указатель, выход за границы массива, используется неинициализированный указатель или вы используете указатели приводя типы C-шным преобразованием, у вас могут быть испорчены объекты.
И при вызове деструктора они разваливаются на части.

PS по аналогии - указателю на самолёт присвоили машину. При попытке удаления крыльев у машины, возникает ексепшн :D


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Igors от Июнь 09, 2014, 15:53
Нужен стек вызовов в отладчике. Без него можно и на 2 листах гадать, и на 20 - все равно толку ноль


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Bepec от Июнь 09, 2014, 16:02
В таком вылете стек уже % на 90 порублен в клочья :)


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Old от Июнь 09, 2014, 16:03
В таком вылете стек уже % на 90 порублен в клочья :)
Почему?


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Old от Июнь 09, 2014, 16:07
2 Ginger_Ministrel
Запустила программу под valgrind и внимательно посмотрите, что он вам напишет.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Bepec от Июнь 09, 2014, 16:12
Ну у меня всегда в таких случаях стек разрушен.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Old от Июнь 09, 2014, 16:15
Ну у меня всегда в таких случаях стек разрушен.
Странно. Стек можно потерять, если писать за пределы буфера выделенного на стеке.
Не самая типичная ошибка.


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Igors от Июнь 09, 2014, 16:22
Ну у меня всегда в таких случаях стек разрушен.
Ну тогда хужее но тоже можно. Перед тем как пускаться в объяснения - подождем ответа ТС


Название: Re: Программа рушится при закрытии через крестик
Отправлено: Alexu007 от Июнь 10, 2014, 14:04
Побольше точек останова в сомнительные места программы, что-то типо ShowMessage. Потом каждый раз жать "Ok" и смотреть, после чего валится.