2014-01-07 3 views
1

У меня есть приложение с 64-битным MFC, в котором я использую отчеты о сбоях. Метод основан на этой статье: http://www.codeproject.com/KB/debug/XCrashReportPt1.aspx?display=Print Итак, у меня есть обертка __try - __except вокруг AfxWinMain. В прошлом году он работал хорошо (я имею в виду разные операционные системы, а также 32-битное и 64-битное приложение). Давайте возьмем это исключение предоставления части коды:Работа с обработкой исключений приложений MFC

void CMyDig::Foo() 
    { 
     std::vector<int> v; 
     int i = v.at(42); 
    } 

Когда я пишу этот код внутри обработчика сообщений диалогового, например clickhandler кнопки под названием Foo, то исключение не попавший в AfxWinMain. Если я пишу то же самое для глобальной функции, он передает исключение в AfxWinMain. Теперь у нас есть эта странная проблема: На некоторых компьютерах случай диалога также генерирует отчет о сбое (входит в блок __except в afxwinmain), но другие нет. Мне удалось создать отчет о сбоях на win7 64-bit, но та же программа на win8, win8.1 и еще одна win7 64bit не делает отчет! Я компилирую с vs2010, а в вариантах генерации кода для «enable C++ exceptions» установлено значение EHsc (как в прошлом году, когда он работал хорошо).

Спасибо за любые идеи! Attila

ответ

0

Было бы проще просто определить SetUnhandledExceptionFilter, чтобы создать отчет об аварии.

В этом случае вам не нужен такой __try/__except блока

WndProcs имеет свои собственные __try __except блоков и некоторые исключения обрабатываются сам по себе. Но так или иначе. У меня никогда не было проблем с фильтром исключений. Мои подпрограммы обычно создают аварийный сброс (minidump) и завершаются. Я всегда чувствовал, что этой простой информации никогда не бывает достаточно для того, чтобы наш технический материал мог найти проблемы.

+0

Спасибо! Вы указали правильный метод, и, похоже, он работает для меня! Я также использовал это руководство: http://www.codeproject.com/Articles/154686/SetUnhandledExceptionFilter-and-the-C-C-Runtime-Li – balazsati

Смежные вопросы