Russian Qt Forum
Ноябрь 13, 2024, 19:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отчет о падении программы.  (Прочитано 8583 раз)
Sergeich
Гость
« : Март 29, 2007, 02:31 »

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

Ты какой компилятор используешь?
Если MSVC то используй Dr.Watson и WER (http://www.microsoft.com/whdc/maintain/StartWER.mspx)
В случае с GCC  может помочь Dr.MinGW.
Записан
burunduk
Гость
« Ответ #2 : Апрель 06, 2007, 10:14 »

я у себя делал так:

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

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

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


если что-то интересно, могу прислать куски кода
Записан
Sergeich
Гость
« Ответ #3 : Май 25, 2007, 03:46 »

2 burunduk: Спасибо за инфу  Веселый
Нашел как получить стек вызовов в винде: http://www.codeproject.com/threads/StackWalker.asp Улыбающийся Правда, сцуко, с юникодом  не дружит, пришлось #undef UNICODE вставлять. А так вроде работает, даже номера строк в коде выдает.
Счас попробую в ExceptionFilter вставить.

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

 Работает Улыбающийся Осталось сделать реализацию под линух. Да, кстати, не догнал нах юзать _CrtSetReportHook: без него все прекрасно работает.
Записан
burunduk
Гость
« Ответ #4 : Май 25, 2007, 08:51 »

можно забить на него
я вставлял его для того чтобы в дебаг версии Q_ASSERTы тоже перехватывались. И подозреваю что это только для win

Цитата: "Sergeich"

 Работает Улыбающийся Осталось сделать реализацию под линух. Да, кстати, не догнал нах юзать _CrtSetReportHook: без него все прекрасно работает.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Май 25, 2007, 18:00 »

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
burunduk
Гость
« Ответ #6 : Май 25, 2007, 22:44 »

когда тестеров просто нету такой подход лучше чем ничего;
по детальным логам уже можно локализовать проблему, а дальше даже если не помогло - можно самим потестить данный участок кода

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Май 25, 2007, 22:48 »

Так как раз тестеры таки и есть Улыбающийся

Цитировать

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergeich
Гость
« Ответ #8 : Май 25, 2007, 23:40 »

Пардон, недосказал, нормальных тестеров как раз и нету Улыбающийся В моем случае есть несколько пользоватей, к-ые работают с прогой в производственном режиме. Прога обрабатывает очень большие объемы данных, как правило около сотни гигов, иногда терабайты, и соответсвенно работает несколько часов (суток). Так что воспроизведение багов довольно проблематично.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Май 26, 2007, 00:46 »

а, вот даже как...
ну тогда конечно, хотя бы с дампом...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.142 секунд. Запросов: 22.