我有一个使用广泛异常规范的项目,我经常抛出异常违反异常列表。
这会导致致电unexpected()
和__cxa_call_unexpected ()
。根据规范,我可以调用set_unexpected来覆盖调用terminate
的默认行为。
这允许我将异常作为std::bad_exception
重新抛出,但之后我丢失了原始异常信息消息。
我可以做些什么来拦截实际的意外异常消息?
重现的代码:
void myunexpected ()
{
throw 0; // throws int (in exception-specification)
}
void test() throws(std::bad_exception)
{
throw new std::invalid_argument("I i'de like to print this");
}
int main(int argc, char **argv)
{
std::set_unexpected (myunexpected);
try {
test();
} catch(std::bad_exception& e) {
qDebug() << e.what();
}
}
这给出了输出:std::bad_exception