1

我在执行 Lua 脚本的 Embarcadero C++ Builder XE10.2 中处理图像处理应用程序。我使用 LuaJIT 和 FFI 来共享图像数据。一切正常。我已经下载了 ZeroBrane Studio 并尝试查看是否可以调试从“主机”C++ 应用程序执行的脚本,所以我已经包含

package.path = package.path .. ";C:/Portable_App/ZeroBraneStudio/lualibs/mobdebug/?.lua"
package.cpath = package.cpath .. ";C:/Portable_App/ZeroBraneStudio/bin/clibs/?.dll"
require("mobdebug").start()

在调用脚本中的任何函数之前。但是,当脚本被加载并执行时(在 C++ 端):

FResult = lua_pcall(FLs, 0, 0, 0);

主机程序因“浮点除以零”异常而崩溃。它崩溃了

require("mobdebug").start()

没有此行脚本可以正常工作。有什么线索吗?

4

1 回答 1

1

根据提供的信息无法判断可能出了什么问题,但您可以尝试获取堆栈跟踪(使用此 SO answers),它应该提供有关导致错误的原因的更多信息。

我知道的唯一部分是使用tostring(1/0)代码生成与平台无关的NaN值的序列化代码。这会导致您的 Lua 配置中出现“浮点除以零”错误吗?

(更新以包括评论中提到的解决方案)该问题与如何处理 FPU 异常的 BCC 编译器设置有关。一种方法是操作 FP control:_clear87(); _control87(MCW_EM, MCW_EM);或设置算术异常掩码: SetExceptionMask(exAllArithmeticExceptions);

于 2018-12-10T21:55:18.547 回答