使用lua_call geting调用的lua函数的错误消息丢失
the error message of a lua function called with lua_pcall geting lost
我使用lua 5.1,并使用lua加载可以从C++调用的函数。
int Error = luaL_loadfile(LuaState, "Test.lua");
if(!Error)
{
Error = lua_pcall(LuaState, 0, LUA_MULTRET, 0);
}
if(Error)
{
std::cerr << "-- " << lua_tostring(LuaState, -1) << std::endl;
lua_pop(LuaState, 1);
}
else
{
LuaStackBalancer LSB(LuaState); //Puts the Lua Stack back to the way it was found
lua_pushstring(LuaState, "Run");
lua_gettable(LuaState, LUA_GLOBALSINDEX);
if(lua_isfunction(LuaState, -1))
{
if(lua_pcall(LuaState, 0, 0, 0))
{
std::cerr << "-- " << lua_tostring(LuaState, -1) << std::endl;
}
}
}
问题是,如果我从C++调用的lua函数调用了另一个出错的函数,那么返回的是该函数的第一个参数,而不是错误消息。
AlwaysErrorsOut定义为:
int AlwaysErrorsOut(lua_State *LuaState)
{
return luaL_error(LuaState, "Error Test Successful");
}
Lua测试1:
--Test.lua
AlwaysErrorsOut("Weirdness is happening")
输出:
--Test.loa:1:错误测试成功
Lua测试2:
--Test.lua
function Run()
AlwaysErrorsOut("Weirdness is happening")
end
输出:
--奇怪的事情正在发生
我目前的理论是,在错误发生后,错误消息被放在堆栈的顶部,然后堆栈被减少到1。
有人知道如何防止错误消息丢失吗?
问题出在我完全忽略的代码中,其中创建了另一个LuaStackBalancer对象,当抛出错误时调用了它的析构函数,导致错误消息丢失^^u
感谢大家的帮助,请原谅我的愚蠢
当完全转换为Lua时,似乎工作得很好(见下文)。也许问题是lua_pcall
设置为不返回值。尝试在对Run
的调用中使用LUA_MULTRET
而不是0
。
local x=loadstring[[
function AlwaysErrorsOut(s)
error("Test Successfull")
end
function Run()
AlwaysErrorsOut("Weirdness is happening")
end
]]
local a,b = pcall(x)
print(a) --> true
print(b) --> nil
local a,b = pcall(_G["Run"])
print(a) --> false
print(b) --> [string "function AlwaysErrorsOut(s)..."]:2: Test Successfull
相关文章:
- 使用 lua 协程 API 和lua_close时出现分段错误
- 在 Lua 中加载 C++ 模块时'Attempt to index a string value'错误
- C++调用lua_dostring来加载具有"require('cjson')"的Lua Scrip引发错误:cjson.so:未定义的符号:lua_getfield
- 如何使用适用于 Lua 的 C API 在控制台中打印错误
- 使用来自C 的LUA,无法打开标准LIB,而没有错误
- Lua 语法错误的描述性错误消息
- 将C编译为C++链接器错误(lua和oolua)
- Visual C++ & Lua - 尝试索引 nil 值错误
- Lua errorPANIC:调用 Lua API 时出现不受保护的错误(尝试调用 nil 值)
- 将错误与lua&luabind链接 - mingw
- 如何将lua5.1添加到CMakeLists.txt?错误:未找到 lua.hpp
- Lua 和 vs2015 的链接器错误
- Lua+Luabind,"runtime error"后堆栈顶部没有错误信息
- C++ 输出 LUA 语法错误
- 当我为调试Lua编译程序时,运行得很好,但为什么我要为发布版编译它,我得到了一个c0000005错误
- 链接器错误Lua 5.1
- C++和Lua-无保护错误(错误回调)?这怎么可能
- 当我调用绑定的 c++ 类函数两次时出现 lua 错误?
- SWIG生成的Lua<-->C++ Wrapper错误地处理了typedef重命名的基元类型
- 试图将函数绑定到lua的c++错误