Converting floating point exceptions into C++ exceptions是否可以在x86 Linux上将浮点异常(信号)转换为C异常? 这是出于调试目的,因此不可移植性和不完善性是可以的(例如,如果不能100%保证所有析构函数都被调用)。 如果您的C标准库实现支持TR1函数 有关这些功能的说明,请参见此处。 我还建议书《 The C Standard Library Extensions:A Tutorial and Reference》(皮特·贝克尔,ISBN-13:9780321412997)一书中的第12.3节"管理浮点环境",对这些功能进行了很好的描述。示例代码。
gcc选项-fnon-call-exceptions可能对您有用。虽然找不到任何文档,所以您的工作量可能会有所不同。 由于信号和异常的工作方式,您不能在引发信号时立即执行操作-异常依赖于堆栈的某些方面,而某些方面在调用信号处理程序时不正确。 您可以在信号处理程序中设置一个全局变量,然后在程序的关键点进行检查,并设置一个异常。但是,这不会为您提供有关引发的异常的确切信息。 我还没有一个现成的解决方案,但是您可能要看的一件事是信号(不确定是否可以安全地从它们中抛出C异常,但是无论如何它应该有助于调试。) 您可以为SIGFPE安装信号处理程序,并将其用于调试目的。 基本思想是为您安装用于浮点异常的适当信号处理程序。在信号处理程序内部,您可以引发异常(或将用户定义的信号发送到将引发异常的另一个进程,或将消息发送到另一个线程以获取类似信息,等等,等等,等等)。有很多方法可以实际引发异常-主要是处理信号。 |