C 使用longjmp在Lua中处理错误

C 使用longjmp在Lua中处理错误,c,error-handling,lua,C,Error Handling,Lua,我正在我当前的项目中嵌入一个Lua解释器(用C编写),我正在寻找一个如何处理错误的示例。这就是我目前所拥有的 if(0 != setjmp(jmpbuffer)) /* Where does this buffer come from ? */ { printf("Aargh an error!\n"); return; } lua_getfield(L, LUA_GLOBALSINDEX, "myfunction"); lua_call(L, 0, 0); printf("Lua

我正在我当前的项目中嵌入一个Lua解释器(用C编写),我正在寻找一个如何处理错误的示例。这就是我目前所拥有的

if(0 != setjmp(jmpbuffer)) /* Where does this buffer come from ? */
{
   printf("Aargh an error!\n");
   return;
}
lua_getfield(L, LUA_GLOBALSINDEX, "myfunction");
lua_call(L, 0, 0);
printf("Lua code ran OK.\n");

手册只是说使用longjmp函数抛出错误,但是longjmp需要一个缓冲区。我必须提供,还是Lua分配缓冲区?手册对此有点含糊不清。

跳转缓冲链是每个线程状态
结构lua\u状态
中的
errorJmp
字段所指向的
结构lua\u longjmp
的一部分。这在Lua核心标题中定义。”这是一种交叉引用的同一种强氧剂

我认为(我不是Lua专家)应该使用宏


希望这有帮助。

经过一些研究和RTF,我已经解决了这个问题。我找错人了

尽管luaapi引用说longjmp用于错误处理,但longjmp缓冲区根本没有通过API公开

要捕获Lua函数中的错误,需要使用Lua_pcall()。我的代码示例可以这样重写,并且可以正常工作:

lua_getfield(L, LUA_GLOBALSINDEX, "myfunction");

if(0 != lua_pcall(L, 0, 0, 0))
   printf("Lua error: %s\n", lua_tostring(L, -1));
else
   printf("Lua code ran OK.\n");

嗯,在做了一些RTF之后,我可能用这个错误的方法找到了一棵树,我认为整个setjmp/longjmp可能是Lua内部的东西。也许我还没有找到其他方法来处理错误。我还在调查,好的,我解决了。如果我想捕捉错误,我需要使用lua_pcall函数。