检索意外的异常类型和消息

时间:2017-07-20 13:43:33

标签: c++ linux

我有一个使用广泛异常规范的项目,我经常抛出异常违反异常列表。

这会导致致电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

0 个答案:

没有答案