gpt4 book ai didi

c - 当发生 Lua 错误时,使用 MINGW32 编译的 Lua 5.2 使我的主机程序崩溃

转载 作者:行者123 更新时间:2023-12-02 00:03:31 24 4
gpt4 key购买 nike

使用 MINGW32 编译 Lua 5.2 会创建一个库 (lua52.dll),当发生 Lua 错误时,该库可能会使主机应用程序崩溃。

我通过在测试脚本中制造 Lua 语法错误来检测到此错误。如果脚本完全没有错误,则主机程序成功运行了它。但是,当加载无效脚本时(例如,在 IF block 中缺少 THEN),主机程序崩溃。

这是我的代码片段:

//Load the script    
int status = luaL_loadfile(L, "foo.lua");
if (status == 0) {
//Run the script
....
} else {
warn("LUA script error: %d. %s", status, lua_tostring(L, -1));
lua_pop(L, 1);
}

如果脚本没有语法错误,status为0,脚本执行成功。否则,luaL_loadfile 不返回,程序崩溃。

最佳答案

问题出在 Lua 的 Makefile 中指定的 CFLAGS 中。最初,src/Makefile 包含以下行:

CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)

问题已通过将其更改为:

CFLAGS= -O2 -fno-omit-frame-pointer -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)

解释

Lua 的错误处理是基于函数setjmplongjmp 的使用。 -O2 优化标志隐式地使编译器变为 omit the frame pointer .为避免这种情况,我们通过 -fno-omit-frame-pointer 来覆盖此设置。

希望这对您有所帮助。

关于c - 当发生 Lua 错误时,使用 MINGW32 编译的 Lua 5.2 使我的主机程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com