4

我正在开发一个程序(C++,使用 D3D9)和 Lua。我已经实现了 LUA Api,除了错误处理之外,一切都运行良好。我用谷歌搜索了很多,我找到了一个可以处理大部分错误的解决方案。我写这个是因为其他错误。

我将在图片中向您展示一些相关代码。

代码第 1 部分 (LUA)

代码第 2 部分 (LUA)

第 3 部分(控制台输出)

现在最重要的函数:PerformCall() 和 LuaErrorReport()

第 4 部分 (C++) 第 5 部分(执行呼叫)

但是,正如我之前所说:正在处理一些错误。但这个不是。

4

1 回答 1

3

关于可能出错的一些想法。你正在通过L 一段lua_pcall时间LuaErrorReportState()代替。他们可能正在处理不同lua_State的事情,这可能发生在协程的上下文中。如果这是故意的,至少在某个地方说明为什么要这样做。

内部看起来也很可疑lua_pushvalueLuaErrorReport您如何知道堆栈中的底部值包含您要报告的消息?此函数从可能在堆栈上累积更多值的其他函数调用。我要么把它改成

lua_pushvalue(L, -3);

或者

lua_pushstring(L, msg);

最后,您还应该考虑debug.traceback作为错误函数传递,lua_pcall以获得更有意义的堆栈跟踪错误消息。就像是:

void LUA::PerformCall(int return_amount)
{
  lua_getglobal(L, "debug");
  lua_getfield(L, -1, "traceback");
  lua_remove(L, -2);
  int errindex = -p_iArgCount - 2;
  lua_insert(L, errindex);
  int error = lua_pcall(L, p_iArgCount, return_amount, errindex);
  // ...

并摆脱debug.trace调用LuaErrorReport

于 2013-08-11T22:33:33.583 回答