用lua_pcall geting调用的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; } } }
Lua测试1:用lua_pcall geting调用的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; } } },c++,lua,C++,Lua,Lua测试1: --Test.lua AlwaysErrorsOut("Weirdness is happening") 输出: --Test.lua:1:错误测试成功 Lua测试2: --Test.lua function Run() AlwaysErrorsOut("Weirdness is happening") end 输出: --奇怪的事情正在发生 我目前的理论是,错误发生后,错误消息被放在堆栈顶部,然后堆栈被减少到1 有人知道如何防止丢失错误消息吗?在完全转换为Lua(见
--Test.lua
AlwaysErrorsOut("Weirdness is happening")
输出:
--Test.lua:1:错误测试成功
Lua测试2:
--Test.lua
function Run()
AlwaysErrorsOut("Weirdness is happening")
end
输出:
--奇怪的事情正在发生
我目前的理论是,错误发生后,错误消息被放在堆栈顶部,然后堆栈被减少到1
有人知道如何防止丢失错误消息吗?在完全转换为Lua(见下文)时似乎可以正常工作。问题可能在于
Lua\u pcall
设置为无返回值。在调用Run
时,尝试使用LUA\u 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
问题在于我完全忽略了一些代码,在其中我创建了另一个LuaStackBalancer对象,当抛出错误导致错误消息丢失时,调用了它的析构函数^^u
谢谢大家的帮助,请原谅我的愚蠢你能出示
AlwaysErrorsOut
的代码吗?int AlwaysErrorsOut(lua_State*LuaState){返回luaL_错误(LuaState,“错误测试成功”)}是的,但我希望能够从C++调用LUA函数并得到错误消息,显然我必须等待10个小时才能把答案设置为> >
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