У нас возникли проблемы с Windows, которые молча используют исключения и позволяют приложению продолжать работу, когда исключение выбрасывается внутри насоса сообщений. Например, мы создали тестовое приложение MFC MDI и переопределили OnDraw:
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: активация контекста деактивирована неактивен для текущей нити выполнения.
Я знаю, почему я получаю исключение контекста приложения, но почему он обрабатывается молча? Это означает, что наши приложения могут испытывать серьезные проблемы при использовании, но мы никогда не узнаем об этом, потому что наши пользователи никогда не сообщают о каких-либо проблемах.