繁体   English   中英

捕获DLL引发的异常

[英]Catching exceptions thrown from DLLs

当异常退出DLL中的函数时,mingw32运行时只调用 terminate std :: unexpected而不是将异常传播给调用DLL的代码。 这个问题有什么解决方案? DLL和调用它的应用程序都使用相同的编译器进行编译。

mingw32支持两种不同的异常机制:SJLJ和Dwarf2。 他们中的一个应该比另一个更好吗? 也许唯一的选择是切换到MSVC或ICC或者单独更改构建选项会有帮助吗?

请注意,即使catch(...)也不会捕获任何异常,甚至不是内置类型(throw 1;),因此它与异常类型的可见性无关。

运行时假设extern "C"函数永远不会抛出异常吗? 我不熟悉MinGW,但我知道Visual Studio有一堆命令行参数来控制这种行为。 例如, /EHs选项将使它假设extern "C"永远不会抛出,并且它将通过调用std::unexpected()来处理抛出的函数,而std::unexpected()又调用std::terminate() 您可能希望调用std::set_unexpected()来建立意外的异常处理程序并查看它是否陷阱。

当从另一个共享库抛出异常时,gcc会保留有关异常类型的信息,这是一个问题。

看到这个错误报告,并尝试谷歌搜索“gcc异常共享库”(我还没有找到解决该问题的方法)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM