Как получить информацию об исключительной ситуации при использовании MiniDumpWriteDump вне процесса?

При использовании функции MiniDumpWriteDump для создания дампа ядра процесса в Windows рекомендуется (например, Вот, а также Вот) что MiniDumpWriteDump запускается из другого «сторожевого» процесса, потому что он может не работать при вызове из того же процесса.

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

Теперь сигнал другому процессу начать запись дампа тривиален (просто используйте событие, семафор, назовите его), но как мне передать LPEXCEPTION_POINTERS информация, которую я получаю для функции обратного вызова, которую я регистрирую SetUnhandledExceptionFilter в другой процесс, чтобы он мог быть передан MiniDumpWriteDumps ExceptionParam аргумент ??

6

Решение

Вам также необходимо значение MINIDUMP_EXCEPTION_INFORMATION.ThreadId. Самый простой способ, и способ, которым я сделал это, состоит в том, чтобы использовать отображенный в памяти файл для передачи обоих ThreadId и ExceptionPointers. И названное событие, чтобы разбудить сторожевого пса. Неважно, что указатель недопустим в контексте сторожевого процесса.

Используйте CreateFileMapping + MapViewOfFile в наблюдаемом процессе как часть его инициализации, OpenFileMapping + MapViewOfFile в наблюдателе. Затем ваш SetUnhandledExceptionFilter должен только вызывать GetCurrentThreadId () и копировать tid и pExcept в представление файла, отображенного в памяти, вызывать SetEvent (), чтобы разбудить сторожевой таймер и заблокировать его до тех пор, пока сторожевой таймер не завершит его.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]