我收到了一位用户来自 MadExcept 的崩溃报告。异常是无效的浮点运算。
但奇怪的是,调用堆栈在 @FSafeDivide 处终止。
我谷歌了一下,发现这是对某些没有正确除法的奔腾芯片的检查。如果测试失败,所有划分都将在软件而不是硬件中完成。我在编译器设置中打开了 Pentium-Safe FDIV 选项。
这可能导致错误吗?我还在其他地方读到,作为异常类的 EInvalidOp 可能是堆栈溢出或其他原因。
如果您想阅读的话,这里有一段疯狂的例外消息。
异常类:EInvalidOp
异常消息:无效的浮点运算。
thread $1014 (TMyBossThread):
00403509 M5b3.exe System @FSafeDivide
008300c9 M5b3.exe MMyWorkerThread 317 TMyBossThread.Search
0073e87a M5b3.exe MMyManagerThread 186 TMyWorkerThread.Execute
008e8c17 M5b3.exe madExcept HookedTThreadExecute
0042c150 M5b3.exe Classes ThreadProc
00405354 M5b3.exe System ThreadWrapper
008e8af9 M5b3.exe madExcept CallThreadProcSafe
008e8b63 M5b3.exe madExcept ThreadExceptFrame
created by main thread ($864) at:
0073e828 M5b3.exe MMyManagerThread 171 TMyManagerThread.Create
首先,除非您实际上仍然有人在早期的 Pentium I 芯片上运行,否则您应该关闭该编译器选项。它是为了解决一些特定 CPU 中的故障,自 1995 年以来销售的任何芯片都没有出现过该问题。
话虽如此,如果除法中存在无效的浮点运算,问题很可能出在代码的某个地方,特别是因为 FSafeDivide 是应该产生正确结果的例程。看一下 TMyBossThread.Search,第 317 行,看看它在那里划分了什么。另请查看第 316 行,因为堆栈跟踪有时会将您指向您关心的行之后的行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)