在执行任意字符串时如何处理Lua中的错误?

时间:2014-03-27 18:34:19

标签: c++11 lua lua-api

我在这里寻求绝对的极简主义。 (自从我使用Lua C API以来已经有一段时间了。)

#include <lua.hpp>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char** argv)
{
    lua_State* state = luaL_newstate();
    luaL_openlibs(state);

    string input;

    while (getline(cin, input))
    {
        auto error = luaL_dostring(state, input.c_str());

        if (error)
        {
            cerr << "Lua Error: " << lua_tostring(state, -1) << '\n';
            lua_pop(state, 1);
        }
    }

    lua_close(state);
    return 0;
}

只要我把它完美地喂给Lua,这个程序就可以正常工作。但是,如果我输入了不好的内容(例如asdf()),程序就会崩溃!为什么它没有优雅地处理我的错误?

我之前试过打破电话。它在调用lua_pcall本身时崩溃了。我从来没有超越那条线。

1 个答案:

答案 0 :(得分:1)

二进制下载(我相信5.2.1)有一个在5.2.3中得到纠正的错误。我从源代码重建了库,现在我的程序工作正常。