C++ 在抛出';Poco::SystemException';
有时(大约100次运行中有1次),我的程序终止时会显示以下消息:C++ 在抛出';Poco::SystemException';,c++,exception-handling,C++,Exception Handling,有时(大约100次运行中有1次),我的程序终止时会显示以下消息: terminate called after throwing an instance of 'Poco::SystemException' what(): System exception 我的代码并不是捕获异常的代码(我所有的捕获都比较详细),我也不确定它是在哪里捕获的。 异常很可能包含有用的消息,但它不是通过what()方法返回的,而是通过displayText()方法返回的 字符串“terminate called
terminate called after throwing an instance of 'Poco::SystemException'
what(): System exception
我的代码并不是捕获异常的代码(我所有的捕获都比较详细),我也不确定它是在哪里捕获的。
异常很可能包含有用的消息,但它不是通过what()方法返回的,而是通过displayText()方法返回的
字符串“terminate called after throwing an instance of”在Google中大约有600k,因此它可能是由编译器插入的代码或某个公共库(pthread?)打印的。
我只在程序在Linux上运行时看到此错误消息(在Windows上从未看到)
有人知道这个未捕获的异常是在什么代码中捕获的吗
有人知道这个未捕获的异常是在什么代码中捕获的吗
根据定义,未捕获的异常在任何地方都不会被捕获
如果不能处理异常,C++异常机制将调用<代码> STD::EndioTeTo()/Cult>(参见包含头<代码> <代码>),这将调用可定制的终止处理程序。在您的平台上,标准终止处理程序打印
std::exception::what()
(Poco的异常从中继承)的输出。不幸的是,按照Poco异常的设计方式,它不会包含任何有用的信息
有多种方法无法处理异常:
- 找不到合适的
处理程序,展开机构退出catch()
。您可以尝试将main()
代码包装在main()
中,以打印异常的try…catch
displayText()
- 函数退出时异常与其异常规范(
)不匹配。这将调用…functionname(…)throw(…)
,然后调用std::unexpected()
(默认情况下)std::terminate()
- 从析构函数中抛出异常,该析构函数在另一个异常的展开过程中调用。永远不要在析构函数中抛出异常李>
- 尝试创建原始异常对象时引发异常。不要在自定义异常类中抛出异常李>
当使用Poco线程且线程被未处理的异常终止时,Poco将调用其内部线程,程序将不会退出,因此我怀疑这是否是线程问题。我收到了相同的错误。我在Poco::Runnable类的run函数中使用了try-catch块。我从这个类中删除了try-catch块,并使用了Poco::ErrorHandler类的派生来处理错误。在此之后,我不再得到这个错误 谢谢。为了便于调试,我在Poco中修改了Exception::what()以将displayText()打印到标准输出。这使得可以看到未捕获异常的实际消息。我仍在努力找出真正的原因,异常是无法锁定互斥锁,可能是从某个析构函数中抛出的。事实证明,该错误在Poco ErrorHandler中,或者至少有一个错误。检查一下:是的,一个库生成了这个消息,尽管这不是pthRoad库,而是编译器附带的C++库。