У меня есть многопоточное приложение c ++ с фильтром SEH (сейчас процесс в процессе — исключения & дальнейшие решения принимаются в том же процессе). Я понял, что выполнять большую часть работы (писать дампы, перезапускать процесс, сообщать о сбое) после обнаружения исключения — плохой дизайн. Плохой дизайн, так как другие работающие потоки должны быть заблокированы, вероятность возникновения исключений внутри самого обработчика исключений.
Я убедил себя, что любой обработчик исключений должен быть
1) Обработчик вне процесса (или)
2) Должен обрабатываться в процессе сторожевой собаки.
Меня больше интересует обработчик Out-Of-Process, где, в отличие от процесса watch-dog, мы должны сначала зарегистрировать обработчик исключений в процессе, подлежащем мониторингу (используя api: WERRegisterRunTimeExceptionModule ) и Windows Error Reporting загрузит обработчик исключений в отдельный процесс, как только возникнет исключение. Мне нужно больше указателей на это, кто-нибудь реализовал это или какие-то учебники или несколько примеров, или мое понимание верно.
Процесс сторожа будет выглядеть так:
1) Запустите процесс сторожевого устройства в процессе, подлежащем мониторингу.
2) Как только возникает исключение, и выполнение находится внутри SetUnhandledExceptionFilter, установите событие и уведомите сторожа.
3) Пропуск, необходимый во время события, уведомляет, чтобы в сторожевой собаке можно было создавать дампы.
Этот подход целесообразен? Как насчет ловушек из-за других запущенных потоков, пока сбойный процесс не уведомит сторожа?
П.С .: 1) Извините за то, что я более многословен.
2) Я знаю, что Google-BreakPad следует методу Out-Of-Process, но я не могу узнать, как реализовать то же самое.
Задача ещё не решена.
Других решений пока нет …