|
Structured Exception Handling 혹은 줄여서 SEH 로 검색해 보세요
__try, __except 로 런타임시 Access Violation 부터 해서 많은 경우를
런타임시 캐치해서 특정 작업(콜스텍을 추적한다던지) 을 진행 할 수 있습니다.
간단하게 예를 들자면 아래와 같습니다.
void ExceptionHandler(EXCEPTION_POINTERS * pException)
{
if(pException->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
::MessageBox(NULL, "Access Violation", "Error", NULL);
}
int main(int argc, char* argv[])
{
__try
{
int * p = NULL;
*p = 0;
}
__except(ExceptionHandler(GetExceptionInformation()))
{
}
return 0;
}
p.s : exception 이 발생 했을때 그 순간 메모리를 바로 덤프 할 수 있는데 MiniDumpWriteDump 를 사용하시면 되고
추후에 윈디버거로 열어보면 그순간을 똑같이 재현 해 디버깅을 쉽게 해줍니다.
|