7
A
回答
3
由于信号和异常工作的方式,当信号被抛出时,不能立即执行它 - 当信号处理程序被调用时,异常依赖于堆栈的某些方面,这不是真的。
您可以在信号处理程序中设置一个全局变量,然后在程序中的关键点检查它并在设置时抛出异常。尽管如此,这并不能提供有关抛出异常的确切信息。
1
我没有一个现成的解决方案,但有一点你可以看看是signals(不知道您是否可以安全地从他们抛出C++异常,但它应该帮助反正调试。)
你可以为SIGFPE安装一个信号处理程序,并将其用于调试目的。
0
基本想法是为你安装适当的信号处理程序来处理浮点异常。在你的信号处理程序中,你可以抛出一个异常(或者发送一个用户定义的信号给另一个进程,这个进程会引发异常,或者向另一个线程发送消息,用于类似的东西等等)。有许多方法可以实际抛出异常 - 主要是处理信号。
3
gcc选项-fnon-call-exceptions可能对您有些用处。尽管如此,您的里程可能会有所不同,但找不到任何文件。
8
如果你的C++标准库实现支持TR1功能 fetestexcept
,feraiseexcept
和feclearexcept
(我还没有,所以我不能对此进行测试),你可以检测5种浮点错误的,然后你可以抛出任何异常你要。
有关这些功能的说明,请参见here。
我还建议第12.3节,“管理浮点环境”一书的C++标准库扩展:教程和参考皮特·贝克尔,ISBN-13:9780321412997,对于这些功能的精彩描述带有示例代码。
alt text http://ak.buy.com/db_assets/prod_images/225/202452225.jpg
相关问题
- 1. 浮点异常C
- 2. C - 浮点异常
- 3. 浮点异常?
- 4. 浮点异常
- 5. C - 浮点异常(核心转储)
- 6. C++浮点数异常
- 7. C编程 - 浮点异常
- 8. 将GetLastError()转换为异常
- 9. C#中的溢出异常将浮点数转换为十进制
- 10. 将JSR303 JavaBean验证异常转换为自定义异常
- 11. 如何使用PostSharp将异常转换为另一个异常?
- 12. 浮点运算异常
- 13. ghdl浮点异常8
- 14. Numpy和PyTables浮点异常
- 15. gfortran警告浮点异常
- 16. SDL/OpenGL浮点异常
- 17. int数组上的浮点异常 - C
- 18. C++浮点异常大文件
- 19. Django的ValueError异常:无法将字符串转换为浮动
- 20. ValueError异常:无法将字符串转换为浮动
- 21. ValueError异常:无法将字符串转换为浮动熊猫
- 22. 将数字转换为文本异常
- 23. 将PHP异常转换为Laravel 5?
- 24. 类转换异常
- 25. XML转换异常
- 26. GCMIntentService转换异常
- 27. C#用户定义的异常,在异常之间转换?
- 28. 如何在将列表中的文字转换为浮点时处理异常?
- 29. C++自动将常量整型转换为浮点型?
- 30. 获取怪异的转换异常:javax.mail.session不能转换为javax.mail.session
你可以计算和使用backtrace_symbols,这至少给你一个完整的堆栈跟踪存储信号处理程序的堆栈跟踪。 – 2008-09-17 19:58:50