Lua的基本信息调试(一)
来源:互联网 发布:centos 系统加固 编辑:程序博客网 时间:2024/05/16 06:47
前段时间在项目中试加入了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函数的接口是:call_function<bool>(m_lua, func_name, player);
如果func出错了,lua会抛出异常,c++程序捕捉到后程序可能会崩掉(就看有没有对异常的抛出做反映),所以光写call_function这个函数的话是看不到错误信息的,我们需要把异常捕捉出来。
try {
bool ret = call_function<bool>(m_lua, func_name, player);
return ret;
} catch(luabind::error& e) {
ERROR_LOG("AI[%u] throw error: err_msg[%s]", player->id, lua_tostring(m_lua, -1));
return false;
}
这样我们就能从堆栈中获取抛出的异常,同时程序也不会因此而崩掉!
当然,这些只能打印简单的错误信息,详细的需要用lua_Debug,这个后续给出。。。
- Lua的基本信息调试(一)
- Lua的基本信息调试
- Lua的基本信息调试(二)
- Lua的基本信息调试(三)--lua_getstack
- Lua 的编辑调试系列教材(一)
- Lua的调试
- 关于lua的调试
- lua下的调试
- 进程和线程 一 进程的基本信息和通信
- 《一》将关注订阅号用户的基本信息入库
- 数据集的基本信息(二)
- linux 中文件(文件夹)的基本信息
- lua 代码的断点调试
- lua调试的工具选择
- lua的编译、调试、运行
- Lua调试工具的选择
- C++与Lua的交互(一)
- lua的入门教程-- C++(一)
- C++Primer 学习
- 非阻塞accept
- c++
- JS eg.
- Firefox插件开发概述
- Lua的基本信息调试(一)
- Algorithms on the Internet
- 关于WSAEWOULDBLOCK
- C#事件与委托
- Oracle数据库如何开启自动归档
- 基于TCP的简单服务器
- php上传大文件
- Android 编译2.6.36的kernel akm8975 driver时unknown field 'ioctl' specified in initializer的问题
- 监听SMS消息(转)