【问题标题】:ZeroBrane remote debugging embedded scriptZeroBrane 远程调试嵌入式脚本
【发布时间】:2019-05-11 20:00:24
【问题描述】:

我在执行 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()

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

【问题讨论】:

    标签: lua c++builder luajit zerobrane


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的。我添加了tostring(1/0) 而不是requre("mobdebug").start() ,并且在从C++ 程序调用lual_loadfile 之后立即抛出异常。
    • 这是什么版本的 LuaJIT?对于运行 LuaJIT 2.0.4 的 tostring(1/0)tostring(1.0/0),我在 Windows 上得到 inf
    • 我有 LuaJIT 2.0.5.,但问题出在 BCC 编译器设置中,即它将如何处理 FPU 异常。在对 Lua 脚本进行任何操作之前,我必须禁用 FP 异常。一种方法是操作 FP 控制字:_clear87(); _control87(MCW_EM, MCW_EM); 或设置算术异常掩码:SetExceptionMask(exAllArithmeticExceptions);...它有效!非常感谢。
    • 顺便说一句,我必须在 lua 脚本中添加以下路径:package.path = package.path .. ";C:/Portable_App/ZeroBraneStudio/lualibs/mobdebug/?.lua" package.path = package.path .. ";C:/Portable_App/ZeroBraneStudio/lualibs/?.lua" package.cpath = package.cpath .. ";C:/Portable_App/ZeroBraneStudio/bin/clibs/?.dll" require("mobdebug").start()
    • 是的,如果您在 ZeroBrane Studio IDE 之外启动脚本/应用程序,则必须将其设置为 package.path/cpath 值以加载 mobdebug 和 luasocket 库。另一种选择是设置LUA_PATHLUA_CPATH,如文档中所述:studio.zerobrane.com/doc-remote-debugging
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2011-06-20
    • 1970-01-01
    • 2017-03-27
    • 2011-06-17
    • 2011-05-26
    • 2015-08-03
    相关资源
    最近更新 更多