Как создать минидамп для дочернего процесса при его сбое?

У меня есть код для вывода минидампа, когда мой процесс имеет исключение, но я хотел бы переместить этот код в родительский процесс, чтобы один не испортил другой.

Как можно (1.) прослушивать сбой дочернего процесса из процесса-оболочки и в результате (2.) записывать минидамп?

C++ кажется наиболее естественным выбором языка для процесса-оболочки, но .NET также подходит для меня (мое приложение представляет собой смесь C#/C++).


person Boinst    schedule 13.08.2012    source источник


Ответы (1)


Насколько я знаю, есть только два способа сделать это. Можно было бы использовать API-интерфейсы отладки для «отладки» дочернего процесса и записи минидампа при возникновении исключения. Я никогда не пробовал это, но я слышал, что это может вызвать проблемы, потому что API отладчика на самом деле не предназначен для использования таким образом.

Другой способ — заранее установить канал связи между родительским и дочерним процессами, а затем зарегистрировать фильтр необработанных исключений в дочернем процессе, который сигнализирует родительскому процессу о необходимости записи минидампа. И Firefox, и Chrome используют этот метод для обработки исключений для своих дочерних процессов через библиотеку Breakpad. Если вы хотите использовать Breakpad, используйте CrashGenerationServer в родительском процессе, а в дочернем процессе — конструктор ExceptionHandler, который принимает либо имя канала, либо дескриптор канала в качестве другого конца канала связи для CrashGenerationServer.

person Ted Mielczarek    schedule 25.09.2012