Russian Qt Forum
Ноябрь 23, 2024, 02:27
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Действия при аварийном завершении программы
Страниц: [
1
]
2
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Действия при аварийном завершении программы (Прочитано 22941 раз)
Nidxogg
Гость
Действия при аварийном завершении программы
«
:
Август 26, 2014, 19:21 »
Добрый день, подскажите
Возможно как-то в программе отловить её аварийное завершение и выполнить какие-либо действия.
Чисто прикладное - программа иногда падает + виснет в процессах. Нужно запустить новый экземпляр и убрать старый( убрать старый из процессов важнее).
win 7 x64 (но хорошо бы кроссплатформенный вариант)
mingw
Записан
Bepec
Гость
Re: Действия при аварийном завершении программы
«
Ответ #1 :
Август 26, 2014, 19:26 »
Watcher. Лучше его ещё не придумали. И не придумают.
Записан
Nidxogg
Гость
Re: Действия при аварийном завершении программы
«
Ответ #2 :
Август 26, 2014, 19:57 »
Цитата: Bepec от Август 26, 2014, 19:26
Watcher. Лучше его ещё не придумали. И не придумают.
Ссылку можно?
P.S. Действия при аварийном завершении программы хочется выполнить в этой же программе
Записан
Bepec
Гость
Re: Действия при аварийном завершении программы
«
Ответ #3 :
Август 27, 2014, 00:00 »
Увы, нельзя никак воскресить программу. Можно попытаться перехватывать исключения определённого типа и там предпринимать действия, но это охватывает далеко не все случаи смерти.
Watcher - шаблон "Наблюдатель". Когда имеется маленькая независимая программа, отслеживающая состояние основной и убивающая/возрождающая её снова.
Во всяком случае я встречал только пару программ, способных восстановиться после серьёзной ошибки, но к сожалению они далеко не на С++ были написаны.
Update: Вот вы написали что она виснет. Если вы точно знаете причину, вы почините программу и она не будет виснуть.
Проще говоря - в программе должны быть описаны все (повторюсь) ВСЕ случаи вылетов/исключений/попыток закрытия/порчи данных/стороннего вмешательства и прочих гадостей
«
Последнее редактирование: Август 27, 2014, 00:02 от Bepec
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Действия при аварийном завершении программы
«
Ответ #4 :
Август 27, 2014, 09:21 »
Цитата: Nidxogg от Август 26, 2014, 19:21
Чисто прикладное - программа иногда падает + виснет в процессах. Нужно запустить новый экземпляр и убрать старый( убрать старый из процессов важнее).
Ну а чем это будет лучше чем стандартный сервис ОС? Если ничем, скорее хуже - так зачем тратить на это время и силы?
Цитата: Nidxogg от Август 26, 2014, 19:21
Возможно как-то в программе отловить её аварийное завершение и выполнить какие-либо действия.
Использовать try/catch. Затыкать таким образом фатальные ошибки (напр обращение по невалидному адресу) нет смысла - их надо исправлять
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Действия при аварийном завершении программы
«
Ответ #5 :
Август 27, 2014, 09:54 »
Так хотелось бы нормальный бэктрейс при падении под виндой, но под мингвом я так и не нашел как такое сделать.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Действия при аварийном завершении программы
«
Ответ #6 :
Август 27, 2014, 16:26 »
Да, мне тоже это интересно. Т.к. для Linux-а можно "потырить" реализацию из QtCreator:
https://qt.gitorious.org/qt-creator/qt-creator/source/61276ab636a29e6b1f8e13afbf498f9d43e15535:src/tools/qtcreatorcrashhandler
Но вот для Windows - непонятно..
Записан
ArchLinux x86_64 / Win10 64 bit
Nidxogg
Гость
Re: Действия при аварийном завершении программы
«
Ответ #7 :
Август 27, 2014, 18:18 »
Цитировать
Проще говоря - в программе должны быть описаны все (повторюсь) ВСЕ случаи вылетов/исключений/попыток закрытия/порчи данных/стороннего вмешательства и прочих гадостей
Это очевидно
Но нет возможности отладиться на машине, на которой в итоге будет работать программа.
Поэтому выход с каким-нибудь диалоговым окном или перезапуском программы в рабочем порядке все же лучше стандартного краша на момент обнаружения ошибки.
Цитировать
Так хотелось бы нормальный бэктрейс при падении под виндой, но под мингвом я так и не нашел как такое сделать.
А под чем нашли?
Цитировать
Ну а чем это будет лучше чем стандартный сервис ОС? Если ничем, скорее хуже - так зачем тратить на это время и силы? Улыбающийся
Заставить лезть пользователя убить процесс ручками?
«
Последнее редактирование: Август 27, 2014, 18:21 от Nidxogg
»
Записан
Bepec
Гость
Re: Действия при аварийном завершении программы
«
Ответ #8 :
Август 27, 2014, 18:36 »
Сервис если зависает, то система его перезапускает. Там спец система для этого.
А вот про "нет возможности отладиться на машине" бессмысленно. На любой машине будут одни и те же аварийные ситуации. Потому их надо описать все. Но это только в идеальном случае. И нет никаких гарантий что участок памяти с кодом восстановления не будет переписан.
PS а раз память могут затереть, нужно контролировать память, иметь где то эталон для сверки и прочая прочая.
«
Последнее редактирование: Август 27, 2014, 18:40 от Bepec
»
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Действия при аварийном завершении программы
«
Ответ #9 :
Август 27, 2014, 18:50 »
Для крэшдампов, вроде, только google breakpad из живого и работоспособного есть, я лично пробовал, работает.
А для отслеживания состояния, как сказал Верес, надо написать отдельный процесс watchdog, который будет по внешнему интерфейсу пинговать сервис и если тот не откликается - прибивать. Если сделаешь этот сервис системной службой, то винда будет автоматом его перезапускать, если выставить нужную опцию при регистрации сервиса.
Записан
Гугль в помощь
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Действия при аварийном завершении программы
«
Ответ #10 :
Август 28, 2014, 07:18 »
Цитата: Nidxogg от Август 27, 2014, 18:18
Поэтому выход с каким-нибудь диалоговым окном или перезапуском программы в рабочем порядке все же лучше стандартного краша на момент обнаружения ошибки.
Палка о двух концах. Показывая такое окно Вы тем самым признаете что Ваше приложение "работает неустойчиво". А главное - нет дешевого способа это сделать, с "вотчером" возни предостаточно.
Цитата: Nidxogg от Август 27, 2014, 18:18
Но нет возможности отладиться на машине, на которой в итоге будет работать программа.
Делайте лог-файл который юзверь может Вам послать.
Да, а у людей на OSX crashReport автоматом + кнопка Send. Развертка стеков вызовов всех ниток, список загруженных либов и еще много чего
Записан
Bepec
Гость
Re: Действия при аварийном завершении программы
«
Ответ #11 :
Август 28, 2014, 07:43 »
Хорошо вам, на OSX. А нам, виндузятникам, приходится логировать более тщательно и отлаживать вслепую
Да, с Watcher'ом возни нет. Вообще. Минут 10 на простейший потратите, который процесс будет поднимать.
Другой вопрос что если виснет, то повторюсь - проблема в вашем коде.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Действия при аварийном завершении программы
«
Ответ #12 :
Август 28, 2014, 08:35 »
еще интереснее - как сделать если программа упала, а на входе пользователь вводил логин\пароль - их негде хранить ?
Записан
vizir.vs
Гость
Re: Действия при аварийном завершении программы
«
Ответ #13 :
Август 28, 2014, 10:42 »
Цитата: Bepec от Август 28, 2014, 07:43
Хорошо вам, на OSX. А нам, виндузятникам, приходится логировать более тщательно и отлаживать вслепую
Да, с Watcher'ом возни нет. Вообще. Минут 10 на простейший потратите, который процесс будет поднимать.
Другой вопрос что если виснет, то повторюсь - проблема в вашем коде.
Для винды тоже есть либы для создания и пересылки коре дампов
Записан
Bepec
Гость
Re: Действия при аварийном завершении программы
«
Ответ #14 :
Август 28, 2014, 10:56 »
Они есть, но неудобочитаемые, глючные и страшные.
to qate - поступать как и все нормальные программы. Сохранять данные СРАЗУ при авторизации.
Записан
Страниц: [
1
]
2
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...