Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hrundel от Апрель 03, 2014, 13:31



Название: [РЕШЕНО] Как узнать почему программа падает на return a.exec(); ?
Отправлено: Hrundel от Апрель 03, 2014, 13:31
Всем привет,

программа проходит удачно через все функции и когда заканчивает обход - падает в main на return a.exec();

Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MainWindow w;
   //w.showFullScreen();
   w.show();
 
   return a.exec();
}

Как можно определить источник ошибки?

Понятно, что источник ошибки сидит перед компьютером, но все же хочется найти объективную причину :) Как это сделать?


Название: Re: Как узнать почему программа падает на return a.exec(); ?
Отправлено: Bepec от Апрель 03, 2014, 14:18
Если она падает на return'е, значит роняет приложение какой то вызов слота. Соответственно берём и ставим на все функции main брякпоинты и смотрим по шажку куда что убегает :)


Название: Re: Как узнать почему программа падает на return a.exec(); ?
Отправлено: Hrundel от Апрель 03, 2014, 14:22
Дык, делал. Ничего вроде, как не убегает.


Название: Re: Как узнать почему программа падает на return a.exec(); ?
Отправлено: Гурман от Апрель 03, 2014, 14:25
ну для начала

Код:
return a.exec();

заменить на

Код:
int r = a.exec();
printf("exit code %i\n", r); // это больше для того, чтобы не заооптимизировало
return r;

и смотреть где упадет...

а вообще, скорее всего, где-то есть лишний delete


Название: Re: Как узнать почему программа падает на return a.exec(); ?
Отправлено: kambala от Апрель 03, 2014, 14:26
может в каком-то деструкторе, который вызывается только при завершении программы, второй раз удаляется указатель


Название: Re: Как узнать почему программа падает на return a.exec(); ?
Отправлено: Swa от Апрель 03, 2014, 14:31
Запускаете программу в отладчике и в момент "падения" можно будет по стектрейсу посмотреть, где ошибочный код


Название: Re: Как узнать почему программа падает на return a.exec(); ?
Отправлено: Hrundel от Апрель 03, 2014, 17:39
... а вообще, скорее всего, где-то есть лишний delete
... второй раз удаляется указатель

Гурман, kambala, спасибо.
Нашелся лишний delete;

Всем спасибо!