C++和Lua-无保护错误(错误回调)?这怎么可能
C++ and Lua - Unprotected Error (bad callback)? How is this possible
我正在使用LuaJIT的FFI,我得到了非常奇怪的结果。这将返回一个PANIC: Unprotected Error (bad callback)
:
function idle(ms)
myDLL.myDLL_idle(session, ms)
end
但这个简单的印刷品解决了这个问题。
function idle(ms)
print("anything")
myDLL.myDLL_idle(session, ms)
end
另一个非常奇怪的解决方案是在主函数中使用myDLL.myDLL_idle()
。这怎么可能呢?如果我把调用放在一个函数中,我也不能只做任何任意的函数,唯一能保证工作的就是打印和睡眠。
function idle(ms)
myDLL.myDLL_idle(session, ms)
end
myDLL.myDLL_idle(session, ms) -- works
idle(ms) -- doesn't work (unless first line of idle() is a print statement)
它在做同样的事情,但只是在另一个功能中。如果我试着把它放在一个函数方法中,打印修复会增加它的怪异之处。这是一个巨大的问题。
根据文档,如果FFI代码调用通过存储回调回调回Lua的C函数,LuaJIT不允许对FFI调用进行JIT编译。在大多数情况下,LuaJIT会检测到这些调用并避免编译,但如果没有,则会中止并显示"错误回调"错误消息。额外的print
起到了帮助作用,因为它阻止了JIT编译(print
不是自动编译的)
所提出的解决方案(而不是调用print
)是显式停止使用jit.off
函数对FFI调用进行JIT编译。
相关文章:
- 不断收到相同的错误...怎么了?C++
- 没有可行的过载'='错误,可能导致这种情况的原因是什么?
- 头文件可以在主类中运行.这怎么可能?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 压缩天然气.AES.错误解密(可能加密)的文件
- 怎么可能只让设备使用 pjsua2 捕获或播放
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- 怎么可能写 f( *this, std::forward<Args>(args)... ) 而 f 只用 F f 声明;
- 在QT C++编辑Qtable模型数据时,我需要得到一个小盒子,我需要显示编辑文本,这怎么可能?
- 使用 thrust::d evice_vector of thrust::complex 编译错误,可能是由于错误的实现
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- C++ Mac Xcode 错误:控制可能达到非无效功能的末尾
- 在给定相同的输入的情况下,某些代码怎么可能花费更多时间来运行,这似乎只是因为它处于循环中?
- 我的代码中出现运行时错误的可能原因是什么?
- 答案怎么可能是433?
- 八进制文字怎么可能是负数?
- 我们可以在整数类型的双指针中分配2D整数数组的地址吗?怎么可能
- OpenGL错误只在未经调试的情况下运行时出现,怎么可能呢
- 这个布尔方法怎么可能编译没有错误
- C++和Lua-无保护错误(错误回调)?这怎么可能