C++ 在抛出';Poco::SystemException';

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

有时(大约100次运行中有1次),我的程序终止时会显示以下消息:

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++库。