有时候(大约100次运行中的1次),我的程序终止于此消息:
terminate called after throwing an instance of 'Poco::SystemException'
what(): System exception
我的代码不是捕获异常的代码(我的所有捕获都更详细),我不确定它被捕获的位置。 异常很可能包含有用的消息,但它不是通过what()方法返回的,而是通过displayText()方法返回的。
字符串“在抛出一个实例后调用终止”在Google中有〜600k,所以它可能是由编译器插入的代码或某些公共库(pthread?)打印的。 当程序在Linux上运行时(我从未在Windows上运行),我才看到此错误消息。
任何人都知道这个未被捕获的异常被捕到了什么代码?
答案 0 :(得分:12)
任何人都知道这个未被捕获的异常被捕到了什么代码?
根据定义,未捕获的异常不会被捕获。
如果无法处理异常,C ++异常机制将调用std::terminate()
(请参阅include header <exception>
),这将调用可自定义的终止处理程序。在您的平台上,标准终止处理程序打印std::exception::what()
的输出(Poco的异常继承自)。不幸的是,Poco的例外设计方式,这将不包含任何有用的信息。
有多种方法无法处理异常:
catch()
处理程序,退出机制退出main()
。您可以尝试在main()
中包装try...catch
代码,以打印例外displayText()
。... functionname(...) throw(...)
)不匹配的异常。这会调用std::unexpected()
,然后调用std::terminate()
(默认情况下)。当使用Poco线程并且线程被未处理的异常终止时,Poco将调用其内部ErrorHandler
并且程序将不会退出,因此我怀疑这是一个线程问题。
答案 1 :(得分:0)
我得到了同样的错误。我在Poco :: Runnable类的run函数中使用了try catch块。我从这个类中删除了try catch块,并使用了Poco :: ErrorHandler类的派生来处理错误。在此之后我停止了这个错误。