이 질문은 다소 오래되었고 이미 많은 답변을 받았지만 예외에 대한 토론에서 계속해서 이것을 놓치고 있기 때문에 C ++ 11에서 적절한 예외 처리를 수행하는 방법에 대한 메모를 추가하고 싶습니다.
StackOverflow here 및 here 에 설명 되어 있으며, 중첩 된 예외를 다시 발생시키는 적절한 예외 처리기를 작성하여 디버거 나 번거로운 로깅없이 코드 내부의 예외에 대한 역 추적을 얻는 방법에 대해 설명합니다 .
파생 된 예외 클래스를 사용하여이를 수행 할 수 있으므로 이러한 역 추적에 많은 정보를 추가 할 수 있습니다! GitHub 에서 내 MWE를 살펴볼 수도 있습니다. 역 추적은 다음과 같습니다.
Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"
std::runtime_error
예외가 발생할 때 많은 정보를 얻기 위해 하위 클래스 를 만들 필요조차 없습니다 .
서브 클래 싱에서 볼 수있는 유일한 이점 std::runtime_error
은 예외 처리기가 사용자 정의 예외를 포착하고 특별한 작업을 수행 할 수 있다는 것입니다. 예를 들면 :
try
{
// something that may throw
}
catch( const MyException & ex )
{
// do something specialized with the
// additional info inside MyException
}
catch( const std::exception & ex )
{
std::cerr << ex.what() << std::endl;
}
catch( ... )
{
std::cerr << "unknown exception!" << std::endl;
}