-fno-某些库的例外?

nik*_*sfi 5 c++ stl g++ exception compiler-flags

这有点类似于“禁用 C++ 异常,如何使任何 std:: throw() 立即终止? ”。我希望每当 STL 抛出异常时我的程序就终止。

问题如下:我正在编写一个库,然后将其作为共享对象加载并由我无法控制的程序执行。不幸的是,这个程序在一个大的尝试块中运行所有内容,这样如果抛出错误,我就不会得到堆栈跟踪/核心转储,从而使::at函数类的超出范围错误变得无用。

这听起来像是 -fno-exceptions 的理想用例,但我不能只使用 -fno-exceptions,因为 boost_log 和调用我的程序都在其标头中定义了异常处理,从而给我带来了 -fno-exceptions 的编译错误。

有没有办法只对 stl 异常启用 -fno-exceptions ?

nik*_*sfi 2

对于 C++11,最简单的方法是添加noexcept到从共享库调用的顶级函数的签名中:

void called_func() noexcept;
Run Code Online (Sandbox Code Playgroud)

这将导致called_func堆栈帧中(或者如果未处理则低于堆栈帧)中任何未处理的异常终止程序的执行。