2012-02-27 5 views
1

가능한 중복 : C++에서
How can I catch all types of exceptions in one catch block?C++에서 모든 예외를 catch 할 수있는 방법이 있습니까?

은 모든 예외를 잡을 수있는 방법은 무엇입니까? 그렇다면 구문은 무엇이 될까요?

메르

+0

당신은 분명히해야합니다; * 모든 예외 또는 * 모든 처리되지 않은 예외를 의미합니까? 결국, Seth가 언급 한대로 try-catch 블록에 엔트리 포인트를 래핑 할 수 있지만 예외를 명시 적으로 처리하고 프로그램을 계속 실행할 수있는 내부 코드가 있으면 엔트리 포인트 catch 블록에 충돌하지 않습니다. –

+0

예외를 디버깅하기 위해이 작업을 수행하는 경우 Visual Studio에서 더 쉬운 방법이 있습니다. 디버그 메뉴에서 예외 옵션으로 이동하여 예외가 발생할 때 VS가 처리되는 경우에도 VS 중지 옵션을 선택할 수 있습니다. –

+0

그런데, 그것은 일반적으로 "가난한 형태"입니다. 특히'try {...} catch (...) {; } '(즉, 가능한/모든 예외를 조용히 먹습니다). – paulsm4

답변

8

예, catch에 의해 내부 try/catch 블록에 의해 처리되지 (및 슬로우 다시하지 않음) 된 모든 예외 ... 보내고 잡을 수 있습니다 : 당신은 다른 이것을 결합 할 수 있습니다

try { 
    // do some stuff 
} catch (...) { 
    // catch any exceptions that weren't handled and/or rethrown in the try block 
} 

catch es이지만 catch (...) 위에 있는지 확인하거나 catch-all에 의해 마스크 처리됩니다 (컴파일러 오류가 발생 함).

+1

내부 try-catch 블록에서 처리되고 프로그램 실행을 중단하지 않는 프로그램이이 프로그램에 버블 링되지 않기 때문에 * 모든 예외가 catch되지는 않습니다. –

+1

@RussC 사실이지만 모든 예외를 문자 그대로 포착하는 것은 C++에서는 불가능합니다. –

+0

동의 함, 그러나 귀하의 말씨가 실수로 오도 된 것입니다. OP가 예외 범위를 알고 있는지 확인하고 싶었습니다. –

5

당신은, 아니 그러나 할 수있는 유용한 것은 특정 예외를 포착하는 것입니다 그리고 마지막으로 (...)

try{ 
    // ... 
} catch (const std::exception& ex) { 
    // ... 
} catch (const std::string& ex) { 
    // ... 
} catch (...) { 
    // ... 
} 
1

에 가을이

try{ 
    // ... 
} catch (...) { 
    // ... 
} 

같은 모든 예외를 잡을 수 있습니다 try/catch 블록 내에 중첩 된 다른 핸들러가 이미 발견 한 예외를 catch 할 수 없으므로 모든 예외를 catch 할 수 없습니다.

관련 문제