Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Sergeich от Март 29, 2007, 02:31



Название: Отчет о падении программы.
Отправлено: Sergeich от Март 29, 2007, 02:31
Задача такая:
  Есть кутевая программа с отладочной информацией, к-ая установлена у нескольких тестеров под win и linux. Естественно  :D она иногда падает. Надо написать кутевый класс, к-ый отслеживает падения средствами ОС, собирает информацию о крэше ( стек вызовов в момент падения и т.д. ) и делает с этой инфой что-то полезное: например пишет в лог или отсылает по мылу разработчику.
  Под линух схема более менее понятная:  устанавливаем обработчик сигналов, в нем вызываем gdb и юзаем его команды (backtrace и т.д.). А что делать под виндой? Понятно, что там должно быть что-то похожее. У кого-нить есть какие-то идеи или наработки?


Название: Отчет о падении программы.
Отправлено: ashatilo от Март 31, 2007, 00:41
Ты какой компилятор используешь?
Если MSVC то используй Dr.Watson и WER (http://www.microsoft.com/whdc/maintain/StartWER.mspx)
В случае с GCC  может помочь Dr.MinGW.


Название: Отчет о падении программы.
Отправлено: burunduk от Апрель 06, 2007, 10:14
я у себя делал так:

в main в самом начале писал вот эти две строчки:
    _CrtSetReportHook(MyReportHook);
    SetUnhandledExceptionFilter(MyFilter);

MyFilter - пишет в лог информацию о креше (стека вызовов нет) + системную информацию о компьютере
архивируются все файлы *.log и отправляются по почте
вместо стека вызовов пишу все вызовы в trace.log

есть еще отдельный класс для уведомления о событиях в программе через jabber


если что-то интересно, могу прислать куски кода


Название: Отчет о падении программы.
Отправлено: Sergeich от Май 25, 2007, 03:46
2 burunduk: Спасибо за инфу  :D
Нашел как получить стек вызовов в винде: http://www.codeproject.com/threads/StackWalker.asp :) Правда, сцуко, с юникодом  не дружит, пришлось #undef UNICODE вставлять. А так вроде работает, даже номера строк в коде выдает.
Счас попробую в ExceptionFilter вставить.

добавлено спустя 1 час 28 минут:

 Работает :) Осталось сделать реализацию под линух. Да, кстати, не догнал нах юзать _CrtSetReportHook: без него все прекрасно работает.


Название: Отчет о падении программы.
Отправлено: burunduk от Май 25, 2007, 08:51
можно забить на него
я вставлял его для того чтобы в дебаг версии Q_ASSERTы тоже перехватывались. И подозреваю что это только для win

Цитата: "Sergeich"

 Работает :) Осталось сделать реализацию под линух. Да, кстати, не догнал нах юзать _CrtSetReportHook: без него все прекрасно работает.


Название: Отчет о падении программы.
Отправлено: Racheengel от Май 25, 2007, 18:00
ИМХО такой подход - путь в никуда.
Крашрепорт, как правило, ничем не помогает разработчику, тем более юзеру.
По моему, надо вещь под дебагером нормально вылизать сначала, на тех примерах, на которых у тестеров происходит падение.
Ибо такого рода репорты - лишний геморой для всех без исключения.


Название: Отчет о падении программы.
Отправлено: burunduk от Май 25, 2007, 22:44
когда тестеров просто нету такой подход лучше чем ничего;
по детальным логам уже можно локализовать проблему, а дальше даже если не помогло - можно самим потестить данный участок кода

Цитата: "Racheengel"
ИМХО такой подход - путь в никуда.
Крашрепорт, как правило, ничем не помогает разработчику, тем более юзеру.


Название: Отчет о падении программы.
Отправлено: Racheengel от Май 25, 2007, 22:48
Так как раз тестеры таки и есть :)

Цитировать

Есть кутевая программа с отладочной информацией, к-ая установлена у нескольких тестеров


Название: Отчет о падении программы.
Отправлено: Sergeich от Май 25, 2007, 23:40
Пардон, недосказал, нормальных тестеров как раз и нету :) В моем случае есть несколько пользоватей, к-ые работают с прогой в производственном режиме. Прога обрабатывает очень большие объемы данных, как правило около сотни гигов, иногда терабайты, и соответсвенно работает несколько часов (суток). Так что воспроизведение багов довольно проблематично.


Название: Отчет о падении программы.
Отправлено: Racheengel от Май 26, 2007, 00:46
а, вот даже как...
ну тогда конечно, хотя бы с дампом...