Название: Программа рушится при закрытии через крестик Отправлено: 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" и смотреть, после чего валится.
|