Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: catprog от Май 15, 2012, 14:57



Название: Неуловимая ошибка ведущая к краху программы
Отправлено: catprog от Май 15, 2012, 14:57
Есть не маленькая прога, очень долго работает и по неведомым причинам через несколько часов работы например, может возникнуть ошибка "segmentation fault". В связи с такой редкой случайностью отладить очень трудно. Подскажите пожалуйста, что можно прописать в код, чтобы если где либо возникнет эта ошибка, случился перехват, который определит место в коде и запишет его в лог.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: Alex Custov от Май 15, 2012, 15:08
пускать через debugger и ловить backtrace


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: catprog от Май 15, 2012, 15:12
пускать через debugger и ловить backtrace
Допустим поймал эту ошибку дебагером, как мне пройтись по коду в обратном порядке?


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: Пантер от Май 15, 2012, 15:29
А зачем в обратном? Тебе нужен стек вызовов.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: catprog от Май 15, 2012, 18:09
А зачем в обратном? Тебе нужен стек вызовов.
Ну стек такой есть. Полезно конечно, но было бы удобно иметь возможность перед возникновением ошибки, записать в лог все что можно.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: Alex Custov от Май 15, 2012, 18:14
Ну стек такой есть. Полезно конечно, но было бы удобно иметь возможность перед возникновением ошибки, записать в лог все что можно.

segfault - это фатальный сигнал, можешь пробовать его перехватывать через signal(2) и записывать какие-то данный в логи, но это легко может не работать. Если стек есть, то он должен натолкнуть на мысли.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: V1KT0P от Май 15, 2012, 18:41
пускать через debugger и ловить backtrace
Допустим поймал эту ошибку дебагером, как мне пройтись по коду в обратном порядке?
Посмотри настройки или плагины для valgrind, должна быть возможность записи вызовов всех функций. Но он только под Linux.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: catprog от Май 15, 2012, 20:28
segfault - это фатальный сигнал, можешь пробовать его перехватывать через signal(2) и записывать какие-то данный в логи, но это легко может не работать. Если стек есть, то он должен натолкнуть на мысли.

А какой объект выдает этот сигнал?


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: Alex Custov от Май 15, 2012, 20:46
А какой объект выдает этот сигнал?

Это сигнал от ядра. man 7 signal


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: catprog от Май 31, 2012, 17:53
А какой объект выдает этот сигнал?

Это сигнал от ядра. man 7 signal

А можно пример кода по ловле этого сигнала с использованием этой функции:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )   [static]

а то чтото я нахожу постороннее по этому запросу.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: mutineer от Май 31, 2012, 17:56
А какой объект выдает этот сигнал?

Это сигнал от ядра. man 7 signal

А можно пример кода по ловле этого сигнала с использованием этой функции:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )   [static]

а то чтото я нахожу постороннее по этому запросу.

Так не получится поймать - это сигнал не Qt, а операционной системы


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: Alex Custov от Май 31, 2012, 18:03
А можно пример кода по ловле этого сигнала с использованием этой функции:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )   [static]

а то чтото я нахожу постороннее по этому запросу.

Это сигнал от ядра приложению, к Qt это не имеет никакого отношения. Читай man 7 signal и man 2 signal.


Название: Re: Неуловимая ошибка ведущая к краху программы
Отправлено: DmitryM от Май 31, 2012, 22:03
В Linux и Windows есть возможность сделать дамп памяти в момент краха приложения.
Далее дамп засовываем в отладчик и смотрим стек вызовов.