Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.231.36] |
|
Сообщ.
#1
,
|
|
|
Написано приложение. обработка ошибок в нем реализована так: try except end
но все же по необъяснимым причинам приложение неожиданно без сообщений закрывается. в случайное время. через дня три. может через месяц. там где софт установлен - агрессивная среда. всякие левые программы некоторые ставят. разные антивирусы о которых я и не слышал. не исключено что чужое приложение закрывает мое. мне бы хотелось сделать какое то логирование происходящего что бы разобраться - что стало причиной закрытия приложения без ошибки. хотелось бы сузить круг поиска ошибки. повысить стабильность и т.п. пожалуйста расскажите как сделать правильный лог ошибок спасибо |
Сообщ.
#2
,
|
|
|
получается - основная задача - узнать кто завершил мой процесс. разумеется наверное как то другим процессом надо это отслеживания. после заврешения основного процесса, уже ничего не сделаешь.
например касперский пишет в логах попытка доступа к PID что то в этом духе мне бы тоже узнать кто последний вмешивался в работу моей программы. но это только получается пол беды. вторая часть это наверное корректная обработка всех критических событий. например я работал со звуком и кто то остановит аудио сервис или еще какой сервис нужный мне. наверное нужно работать с Getlasterror? |
Сообщ.
#3
,
|
|
|
отловить причину почему процесс падает можно или из под отладки или отловить момент падения из самой программы.
для этого в винде есть много плюшек. самое интересное из этого списка SetUnhandledExceptionFilter. реализованный пример с этой функцией есть в jedi компонентах (с дополнительной плюшкой "с раскруткой" стека) пс. так же посмотри на функцию AddVectoredExceptionHandler. она позволит тебе отлавливать все tryExcept (для статистики например ))) ) |
Сообщ.
#4
,
|
|
|
Не получится узнать, кто прибивает прогу.
Если она именно падает, обычно сообщение об этом остается в системном логе |
Сообщ.
#5
,
|
|
|
Fr0sT, в системном логе информация осталась. действительно это просто крах
Добавлено Fr0sT, есть еще вопрос. схожий. как можно сделать следующее: try случилась ошибка тут except обработал ошибку end; я хочу что бы в Appliction.OnException или где то еще в какой то одной глобальной функцией на весь мой проект - я тоже получил детали ошибки. но и блок except end тоже отработал при этом. |
Сообщ.
#6
,
|
|
|
Например, так
try случилась ошибка тут except обработал ошибку App.OnException( EGlobalExc.Create()) end; App.OnException: if E is EGlobalExc then ... Можно и raise, но тогда все дальнейшее выполнение будет прервано, разумеется. Надо смотреть, какая цель. Если просто хочется логировать все исключения и продолжать работу, то такой вариант. |