使用lua_pcall geting丢失的lua函数的错误消息

khm*_*khm 5 c++ lua

我正在使用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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我从C++调用的lua函数调用另一个错误输出的函数,则返回是该函数的第一个参数而不是错误消息.

AlwaysErrorsOut定义为:

int AlwaysErrorsOut(lua_State *LuaState) 
{ 
    return luaL_error(LuaState, "Error Test Successful"); 
}
Run Code Online (Sandbox Code Playgroud)

Lua测试1:

--Test.lua
AlwaysErrorsOut("Weirdness is happening")
Run Code Online (Sandbox Code Playgroud)

日期:

- Test.lua:1:错误测试成功

Lua测试2:

--Test.lua
function Run()
    AlwaysErrorsOut("Weirdness is happening")
end
Run Code Online (Sandbox Code Playgroud)

日期:

- 奇怪的事情正在发生

我当前的理论是,在错误发生后,错误消息被放置在堆栈顶部,然后堆栈减少到1.

有谁知道如何防止丢失错误信息?

khm*_*khm 1

问题在于我完全忽略了我的一些代码,其中我创建了另一个 LuaStackBalancer 对象,并且在抛出错误时调用了它的析构函数,导致错误消息丢失。^^你

谢谢大家的帮助,请原谅我的愚蠢