Lua的pcall错误处理

来源:互联网 发布:数据分析excel面试题目 编辑:程序博客网 时间:2024/05/18 18:00
#include "stdafx.h"#include <windows.h>#include <string>#include <iostream>#include <sstream>using namespace std;extern "C"{#include "lua.h"#include "lualib.h"#include <lauxlib.h>};int pcall_callback_err_fun(lua_State* L){lua_Debug debug= {};int ret = lua_getstack(L, 2, &debug); // 0是pcall_callback_err_fun自己, 1是error函数, 2是真正出错的函数lua_getinfo(L, "Sln", &debug);std::string err = lua_tostring(L, -1);lua_pop(L, 1);std::stringstream msg;msg << debug.short_src << ":line " << debug.currentline;if (debug.name != 0) {msg << "(" << debug.namewhat << " " << debug.name << ")";}msg << " [" << err << "]";lua_pushstring(L, msg.str().c_str());return 1;}int main(){ lua_State * L = luaL_newstate();    //创建lua运行环境 luaL_openlibs(L); int ret = luaL_loadfile(L,"func.lua") ;       //加载lua脚本文件 ret = lua_pcall(L, 0, 0, 0); lua_pushcfunction(L, pcall_callback_err_fun); int pos_err = lua_gettop(L); lua_getglobal(L,"f");               //调用lua中的函数f ret = lua_pcall(L, 0, 1, pos_err) ; if ( ret != 0 ) {int t = lua_type(L, -1);const char* err = lua_tostring(L,-1);printf("Error: %s\n", err);lua_pop(L, 1); } lua_close(L) ;   return 0;}/*-- func.lualocal function f_err()print("f_err!");-- 错误测试error("error!!");print("f_err!!");return 0;endfunction f()print("f!");f_err();print("f!!");return 0;endprint("Load OK!");*//*输出: Load OK!f!f_err!Error: func.lua:line 5(upvalue f_err) [func.lua:5: error!!]*/

1 0
原创粉丝点击