何が間違っている可能性があるかについてのいくつかの考え。代わりにwhile getsを渡していますL
。彼らは、コルーチンのコンテキストのように発生する可能性のあるさまざまな作業を行っている可能性があります。これが意図的なものである場合は、少なくとも、これが行われている理由をどこかに示してください。lua_pcall
LuaErrorReport
State()
lua_State
lua_pushvalue
中身LuaErrorReport
も怪しい。スタックの一番下の値が、報告しているメッセージを保持していることをどのように確認できますか? この関数は、スタック上により多くの値を蓄積した可能性のある他の関数から呼び出されます。私はそれを次のように変更します
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
ます。