2010-05-13 9 views
1

처리되지 않은 예외가 Windows의 wxWidgets 응용 프로그램에서 처리 될 때 프로그램은 Widgets 예외 처리기에서 생성 된 Abort-Retry-Ignore 메시지를 표시합니다. 일반적인 처리되지 않은 예외 동작을 얻으려면 : 프로그램이 표준 Windows 처리되지 않은 예외 대화 상자로 종료되어야합니다. 위젯이 제한없는 예외를 잡는 것을 막을 수 있습니까?wxWidgets 예외 처리

답변

1

을 덮어 쓰고 간단히 throw을 호출하십시오.

+0

, 원하는 동작을 제공하지 않습니다 모두 시도입니다. OnUnhandledException은 위젯 예외 목록이 표시된 후에 만 ​​호출됩니다. OnExceptionInMainLoop을 던지면 예외없이 프로그램이 종료됩니다. 두 경우 모두 원래 예외 컨텍스트가 손실됩니다. –

+0

참고로,'OnUnhandledException'은'OnExceptionInMainLoop'의 기본 구현에 의해 제시된 Abort/Retry/Ignore 대화 상자 후에 만 ​​호출됩니다. –

0

wxWidgets 3.0.8 (이전 버전 일 수도 있음)에서 wxApp::OnExceptionInMainLoop을 무시할 수 있습니다. (실제로 AppConsole의 설명서입니다. 응용 프로그램의 설명서를 찾을 수 없지만 동일하게 작동합니다).

해당 함수 내부에서 다시 시작하면 원하는 동작을 얻게 될 것입니다.

이 함수의 기본 클래스 구현은 wxWidgets Abort/Retry/Ignore 대화 상자입니다.

참고 :이 또한 당신이 당신의 자신의 방법으로 예외를 처리하고 실행을 재개 할 경우에 할 수있는 것은, 예컨대 : OnUnhandledException 및 OnExceptionInMainLoop 시도

// 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 
}