这是我的代码,它以字符串形式运行Lua脚本。
bool doString(const char *s)
{
const int ret = luaL_dostring(L, s);
if (ret)
{
if (ret == LUA_ERRSYNTAX)
printf("Error: %s", lua_tostring(L, -1));
else if (ret == LUA_ERRMEM)
printf("Error: memory error");
else
printf("Error: syntax error");
return false;
}
return true;
}
但是在很多情况下,我的代码仅显示Error: syntax error
,而没有任何关于错误发生位置的进一步描述。
如何正确打印错误消息,使其更具描述性?
答案 0 :(得分:2)
luaL_dostring
成功返回LUA_OK /* 0 */
,失败[1]返回1
。如果失败,它将在堆栈中推送一条错误消息,描述问题。这可以通过在文档[2]中遵循luaL_loadstring
至lua_load
来确定。此外,luaL_dostring
会调用lua_pcall
,当失败(没有设置处理程序)时,它也会将错误对象压入堆栈[3]
当您得到非零结果时,您可以检查堆栈顶部是否有错误消息并打印:
bool doString(const char *s) {
const int ret = luaL_dostring(L, s);
if (ret != LUA_OK) {
printf("Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1); // pop error message
return false;
}
return true;
}