将浮点异常转换为C++异常

Geo*_*ing 7 c++ floating-point signals exception

是否有可能在x86 Linux上将浮点异常(信号)转换为C++异常?

这是出于调试目的,因此非可移植性和不完美性是可以的(例如,如果不能100%保证所有析构函数都被调用).

jwf*_*arn 8

如果您的C++标准库实现支持TR1函数 fetestexcept,feraiseexcept并且feclearexcept(我还没有,那么我无法测试它)您可以检测到五种浮点错误,然后您可以抛出您想要的任何异常.

有关这些功能的说明,请参见此处.

我还推荐了"C++标准库扩展: Pete Becker的教程和参考 "一书中第12.3节"管理浮点环境" ,ISBN-13:9780321412997,以获得带有示例代码的这些函数的优秀描述.

替代文字


Bra*_*nan 3

由于信号和异常的工作方式,您无法在引发信号时立即执行此操作 - 异常依赖于堆栈的某些方面,而在调用信号处理程序时这些方面并不正确。

您可以在信号处理程序中设置一个全局变量,然后在程序中的关键点检查它,如果设置了则抛出异常。不过,这并没有为您提供有关引发的异常的确切信息。