如何检查抛出的所有异常都有匹配的catch子句

时间:2010-01-14 13:28:02

标签: c++ exception-handling

在java中,编译器抱怨未捕获的异常。

我在C ++中使用异常而我错过了这个功能。

那里有工具可以做到吗?也许是一个编译器选项(但我怀疑它)

4 个答案:

答案 0 :(得分:3)

在C ++中确实没有办法做到这一点。但是很容易在程序的顶层提供默认的异常处理,这将捕获在较低级别中遗漏的任何内容。当然,您真的不希望在此级别捕获大多数异常,但您至少可以提供合理的诊断消息。

答案 1 :(得分:3)

静态分析器可以运行代码,并在函数可能抛出未处理的异常时发出警告

例如好老pc-lint
coverity

答案 2 :(得分:1)

您必须在顶级捕获所有异常。通常这就足够了:

try {
   //do stuff
} catch( std::exception& e ) {
 // log e.what() here
} catch( YourCustomExceptionHierarchyRoot& e) {
 // Perhaps you have smth like MFC::CException in your library
 // log e.MethodToShowErrorText() here
} catch( ... ) {
 // log "unknown exception" here
}

你需要在程序的顶层执行此操作(像main()一样)。

此外,如果您实现COM方法,则必须对每个暴露于COM的代码执行相同的操作 - 不允许通过COM边界抛出异常。

答案 3 :(得分:1)

Java有checked exceptions,这与C ++的实现方式不同。捕获所有异常的一种方法是...语法,如下所示:

try
{
  // code here can throw
}
catch ( const std::exception& stde )
{
  // handle expected exception
}
catch ( ... )
{
  // handle unexpected exceptions
}

还有一个运行时机制可以通过set_unexpected()对意外异常做出反应,但它的用处是debatable

首选方法是尝试撰写exception-safe code