обработка исключений wxWidgets - PullRequest
1 голос
/ 13 мая 2010

Когда необработанное исключение обрабатывается в приложении wxWidgets в Windows, программа отображает сообщение Abort-Retry-Ignore, созданное обработчиком исключений Widgets. Я хочу получить нормальное поведение необработанных исключений: программа должна завершаться стандартным диалоговым окном необработанных исключений Windows. Можно ли запретить виджетам перехватывать необработанные исключения?

Ответы [ 2 ]

1 голос
/ 13 мая 2010

Переопределите wxApp::OnUnhandledException() и просто позвоните throw туда.

0 голосов
/ 14 августа 2017

В wxWidgets 3.0.8 (возможно, и в более ранних версиях) вы можете переопределить wxApp::OnExceptionInMainLoop. (Это фактически документация для AppConsole, я не смог найти документацию для App, но она работает так же).

Если вы выбросите изнутри эту функцию, вы, вероятно, получите желаемое поведение.

Реализация этой функции в базовом классе - это диалоговое окно wxWidgets Abort / Retry / Ignore.

Примечание: это также нужно сделать, если вы хотите обработать исключение по-своему и возобновить выполнение, например ::

// In your App class that derived from wxApp
virtual bool OnExceptionInMainLoop() override
{
    try { throw; }
    catch(std::exception &e)
    {
        MessageBoxA(NULL, e.what(), "C++ Exception Caught", MB_OK);
    }
    return true;   // continue on. Return false to abort program
}
...