Omr*_*dan 5 c++ exception-handling
有时(大约100次运行中的1次),我的程序终止于此消息:
terminate called after throwing an instance of 'Poco::SystemException'
what(): System exception
Run Code Online (Sandbox Code Playgroud)
我的代码不是捕获异常的代码(我的所有捕获都更冗长),我不确定它被捕获的位置.异常很可能包含有用的消息,但它不是通过what()方法返回的,而是通过displayText()方法返回的.
字符串"在抛出一个实例后调用终止"在Google中有〜600k,所以它可能是由编译器插入的代码或某些公共库(pthread?)打印的.当程序在Linux上运行时(我从不在Windows上),我只看到此错误消息.
谁知道这个未被捕获的异常被捕到了什么代码?
Fer*_*yer 13
谁知道这个未被捕获的异常被捕到了什么代码?
根据定义,未捕获的异常不会被捕获.
如果无法处理异常,C++异常机制将调用std::terminate()(请参阅include头<exception>),这将调用可自定义的终止处理程序.在您的平台上,标准终止处理程序打印输出std::exception::what()(Poco的异常继承自).不幸的是,Poco的例外设计方式,这将不包含任何有用的信息.
有多种方法无法处理异常:
catch()处理程序,退出机制退出main().您可以尝试将main()代码包装起来try...catch以打印异常displayText().... functionname(...) throw(...))不匹配的异常.这将调用std::unexpected()哪个调用std::terminate()(默认情况下).当使用Poco线程并且线程被未处理的异常终止时,Poco将调用其内部ErrorHandler并且程序将不会退出,因此我怀疑这是一个线程问题.
| 归档时间: |
|
| 查看次数: |
23269 次 |
| 最近记录: |