int CExceptTestApp::Run() {
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
int nRet = -1;
__try{
nRet = CWinApp::Run();
}__except(Except(GetExceptionInformation())){
//例外をそのまま返却して、アプリケーションを終了させる
}
return nRet;
}
BOOL CExceptTestApp::ProcessShellCommand( CCommandLineInfo& rCmdInfo ){
__try{
CWinApp::ProcessShellCommand(rCmdInfo);
}__except(Except(GetExceptionInformation())){
return FALSE;
}
}
int CExceptTestApp::Except(LPEXCEPTION_POINTERS pExp){
if(pExp){
CString strExpCode = "UNKNOW";
switch(pExp->ExceptionRecord->ExceptionCode){
case EXCEPTION_ACCESS_VIOLATION:
strExpCode = "EXCEPTION_ACCESS_VIOLATION";
break;
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
strExpCode = "EXCEPTION_ARRAY_BOUNDS_EXCEEDED";
break;
case EXCEPTION_BREAKPOINT:
strExpCode = "EXCEPTION_BREAKPOINT";
break;
case EXCEPTION_DATATYPE_MISALIGNMENT:
strExpCode = "EXCEPTION_DATATYPE_MISALIGNMENT";
break;
case EXCEPTION_FLT_DENORMAL_OPERAND:
strExpCode = "EXCEPTION_FLT_DENORMAL_OPERAND";
break;
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
strExpCode = "EXCEPTION_FLT_DIVIDE_BY_ZERO";
break;
case EXCEPTION_FLT_INEXACT_RESULT:
strExpCode = "EXCEPTION_FLT_INEXACT_RESULT";
break;
case EXCEPTION_FLT_INVALID_OPERATION:
strExpCode = "EXCEPTION_FLT_INVALID_OPERATION";
break;
case EXCEPTION_FLT_OVERFLOW:
strExpCode = "EXCEPTION_FLT_OVERFLOW";
break;
case EXCEPTION_FLT_STACK_CHECK:
strExpCode = "EXCEPTION_FLT_STACK_CHECK";
break;
case EXCEPTION_FLT_UNDERFLOW:
strExpCode = "EXCEPTION_FLT_UNDERFLOW";
break;
case EXCEPTION_ILLEGAL_INSTRUCTION:
strExpCode = "EXCEPTION_ILLEGAL_INSTRUCTION";
break;
case EXCEPTION_IN_PAGE_ERROR:
strExpCode = "EXCEPTION_IN_PAGE_ERROR";
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
strExpCode = "EXCEPTION_INT_DIVIDE_BY_ZERO";
break;
case EXCEPTION_INT_OVERFLOW:
strExpCode = "EXCEPTION_INT_OVERFLOW";
break;
case EXCEPTION_INVALID_DISPOSITION:
strExpCode = "EXCEPTION_INVALID_DISPOSITION";
break;
case EXCEPTION_NONCONTINUABLE_EXCEPTION:
strExpCode = "EXCEPTION_NONCONTINUABLE_EXCEPTION";
break;
case EXCEPTION_PRIV_INSTRUCTION:
strExpCode = "EXCEPTION_PRIV_INSTRUCTION";
break;
case EXCEPTION_SINGLE_STEP :
strExpCode = "EXCEPTION_SINGLE_STEP";
break;
case EXCEPTION_STACK_OVERFLOW:
strExpCode = "EXCEPTION_STACK_OVERFLOW";
break;
default:
break;
}
CString strExpInfo;
strExpInfo.Format("%d[0x%08X] : %s\r\n"
" Flag = 0x%08X\r\n"
" Address = 0x%08X\r\n"
,pExp->ExceptionRecord->ExceptionCode
,pExp->ExceptionRecord->ExceptionCode
,strExpCode
,pExp->ExceptionRecord->ExceptionFlags
,pExp->ExceptionRecord->ExceptionAddress);
AfxMessageBox(strExpInfo);
}
return 0;
}
|