Название: Неуловимая ошибка ведущая к краху программы Отправлено: 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 Допустим поймал эту ошибку дебагером, как мне пройтись по коду в обратном порядке?Название: 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 есть возможность сделать дамп памяти в момент краха приложения.
Далее дамп засовываем в отладчик и смотрим стек вызовов. |