前段时间在项目中试加入了lua脚本,但由于匆忙很不完善,没有任何的调试信息,包括出错信息的打印,所以很是痛苦!最近终于开始着手完善lua程序,只是从没用过,一切都是从头学起!
首先是载入脚本的时候:luaL_dofile(m_lua, pathname.c_str());
如果是lua脚本的语法等基本错误,这时候luaL_ dofile会返回错误码,但想知道错误信息就必须看堆栈了。
其实查看文档就知道,luaL_dofile分两步:luaL_loadfile以及lua_pcall,因此可以加入如下信息:
if (luaL_loadfile(m_lua, pathname.c_str()) != 0) {
std::cout<<"loadfile error[file:"<<pathname.c_str()<<"]: "<<lua_tostring(m_lua, -1)<<endl;
}
if (lua_pcall(m_lua, 0, LUA_MULTRET, 0) != 0) {
std::cout<<"pcall error[file:"<<pathname.c_str()<<"]: "<<lua_tostring(m_lua, -1)<<endl;
}
这样就是在load的时候把基本的语法错误信息给打印出来。
第二,在lua运行中出错,这个就比较麻烦点了,在我们的项目中使用的是luabind。
调用lua函数的接口是