한스 패스언트의 답변은 SetUnhandledExceptionFilter입니다. 그는 프로세스의 여러 부분이 불안정한 상태 일 수 있기 때문에 콜백 내에서 너무 많이 할 수 없다는 점에 대해 좋은 점을 제시합니다.
그러나 문제가 설명 된 방식에서 시스템에 정상적인 충돌 대화 상자를 표시하지 않는 것 외에는 아무 것도하지 않는 것처럼 들리지는 않습니다. 이 경우 충돌이 영향을 미칠 수있는 프로세스 부분에 관계없이 쉽고 안전해야합니다.
과 같은 기능 뭔가 확인 : (가능한 한 빨리 아마)
LONG WINAPI UnhandledExceptionCallback(PEXCEPTION_POINTERS pExceptPtrs)
{
if (IsDebuggerPresent())
// Allow normal crash handling, which means the debugger will take over.
return EXCEPTION_CONTINUE_SEARCH;
else
// Say we've handled it, so that the standard crash dialog is inhibited.
return EXCEPTION_EXECUTE_HANDLER;
}
그리고 어딘가에 당신의 프로그램에서 콜백 설정 :
SetUnhandledExceptionFilter(UnhandledExceptionCallback);
당신이 원하는 일을해야한다 - 어떤 허용 자동으로 죽을 특정 프로그램의 충돌.
그러나 타사 구성 요소 (DLL, OCX 등)를 가져올 때마다 그 중 하나도 SetUnhandledExceptionFilter를 호출 할 수 있으므로 자신의 콜백을 자신의 것으로 바꿀 위험성이 있습니다. . 한 번 인스턴스화 할 때 자체 콜백을 설정할 ActiveX 컨트롤을 발견했습니다. 그리고 더 나쁜 것은 원래의 콜백이 파괴되었을 때 원래 콜백을 복원하지 못했습니다. 그것은 그들의 코드에서 버그 인 것 같았지만 관계없이 내가 원하는 콜백이 적어도 컨트롤이 종료 된 후에 있어야한다고 확신 할 수 있도록 추가 조치를 취해야했습니다. 따라서 콜백을 올바르게 설정했음을 알았을 때도 이것이 때때로 작동하지 않는 것으로 밝혀지면 비슷한 결과가 발생할 수 있습니다.
추가 참고,이 충돌은 처리되지 않은 구조적 예외 (액세스 위반, 스택 오버플로 등)에 의해 발생되는 경우 구조화 된 예외 처리기를 사용하여 조사 할 수 있습니다. 그것들을 사용하여 정보를 기록하고 자동으로 충돌하거나 다른 작업을 수행 할 수 있습니다. –