Создание сторожевого таймера для захвата минидампов

Я пытаюсь добавить функциональность захвата мини-дампов, когда моя программа падает. Из того, что я прочитал, это лучше всего достигается с помощью другого приложения (сторожевого таймера), которое используется для размещения реального приложения и выполнения дампа.

Просматривая подобные сообщения, я пришел к следующему (и App, и WatchDog реализованы на C++ с использованием Win32):

  • Когда сторожевой таймер запускается, он создает 2 события, событие ExitedOk и событие Exception, оба из которых устанавливаются как наследуемые и не сигнализируются. Он также создает наследуемое сопоставление файлов.

  • Затем сторожевой таймер запускает "реальное приложение" и ожидает в объекте WaitOnMultipleObjects сигнала ExitedOk или Exception.

  • Когда приложение запускается, оно создает те же 2 события (оно наследует дескрипторы)

  • Приложение сконфигурировано так, что если оно выходит нормально, оно сигнализирует ExitedOk или, если происходит необработанное исключение, оно сохраняет информацию об исключении / потоке, используя унаследованное сопоставление файлов, сигнализирует об исключении, а затем переходит в спящий режим (бесконечно).

  • Если WaitOnMultipleObjects в сторожевом таймере сигнализируется с помощью ExitedOk, ничего не происходит. Если это сигнализируется с помощью Exception, то он считывает информацию об исключении / потоке, используя сопоставление файлов, а затем вызывает MiniDumpWriteDump.

Очевидно, что Sleep() является проблемой. Это лучше всего решается с помощью другого события? Так что приложение ждет, пока сторожевой таймер не сообщит о каком-либо событии "FinishedCreatingDump"?

Во-вторых, я подумал, что весь смысл сторожевого таймера заключался в том, что вы не выполняли какую-либо работу в аварийном процессе, которая потенциально нестабильна? Если я правильно понимаю рабочий процесс, и что вам действительно нужен SetEvent/OpenFileMapping/MapViewOfFile в процессе, который фактически завершился с ошибкой, разве это не так плохо, как вызов MiniDumpWriteDump из него?

0 ответов

Другие вопросы по тегам