Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用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 - Fatal编程技术网

用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_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(见

Lua测试1:

--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