У нас возникли проблемы с Windows, которые молча используют исключения и позволяют приложению продолжать работу, когда исключение выбрасывается внутри насоса сообщений. Например, мы создали тестовый MFC MDI приложения, и отменяют OnDraw:Исключения, незаметно зажатые Windows, как обращаться вручную?
void CTestView::OnDraw(CDC* /*pDC*/)
{
*(int*)0 = 0; // Crash
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Вы ожидали бы противное сообщение об ошибке при запуске приложения, но вы на самом деле не получить вообще ничего. Программа, кажется, работает отлично, но если вы посмотрите в окно вывода Вы увидите:
первого шанса исключение в 0x13929384 в TEST.exe: 0xC0000005: Нарушение прав доступа написание местоположения 0x00000000.
первого шанса на исключение 0x77c6ee42 в test.exe: 0xC0150010: контекст активации деактивируется не активен для текущего потока исполнения.
Я знаю, почему я получаю исключение контекста приложения, но почему его обрабатывают молча? Это означает, что наши приложения могут испытывать серьезные проблемы при использовании, но мы никогда не узнаем об этом, потому что наши пользователи никогда не сообщают о каких-либо проблемах.
Вы используете Visual Studio? –
Да, Visual Studio 2008. –
Хорошо, тогда посмотрите и попробуйте мой ответ ниже ... –