У меня есть программа Visual Studio 2008 C ++, в которой программа заключена в блок __try
/ __except
для захвата любых исключений SEH. Фильтр исключений создает журнал ошибок и дает пользователю подробные инструкции о том, как отправить отчет о неисправности.
Нужно ли заключать код в фильтре в другой блок __try
/ __except
? Если нет, что произойдет, если это исключение? Если так, как это должно быть обработано?
static int MyFilter( struct _EXCEPTION_POINTERS* ep )
{
/*
Code to log the exception information, and instruct the user
on how to submit a defect report. Should this be in another
__try/__except block?
*/
return EXCEPTION_EXECUTE_HANDLER;
}
int WINAPI _tWinMain( HINSTANCE hInstance,
HINSTANCE /*hPrevInstance*/,
LPTSTR lpstrCmdLine,
int nCmdShow )
{
int result = 0;
__try
{
result = Execute( hInstance, lpstrCmdLine, nCmdShow );
}
__except( MyFilter( GetExceptionInformation() ) )
{
// empty
}
return 0;
}
Спасибо,
PaulH
Изменить:
Если MyFilter
вызывает исключение, я попадаю в бесконечный цикл исключений. Таким образом, похоже, что требуется обработка __try
/ __except
. Я смотрю на это:
static int MyFilter( struct _EXCEPTION_POINTERS* ep )
{
__try
{
/*
Code to log the exception information, and instruct the user
on how to submit a defect report.
*/
// cause an exception
int x = 0, y = 1 / x;
}
__except( EXCEPTION_EXECUTE_HANDLER ) { /*empty*/ }
return EXCEPTION_EXECUTE_HANDLER;
}
В этом случае программа должна иметь аварийное завершение, и исключение должно быть передано в ОС для ее обработки. Это правильно?