223 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			223 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef LIBPDEBUG_H
							 | 
						|||
| 
								 | 
							
								#define LIBPDEBUG_H
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//1.使用源码编译,要打开宏USE_SOURCE_CODE.  win下要设置LUA_INTEGER和lua版本号
							 | 
						|||
| 
								 | 
							
								#define LUA_DEBUGGER_NAME     "LuaPanda"    //debugger's name in LuaDebug.lua
							 | 
						|||
| 
								 | 
							
								#define HOOK_LIB_VERSION      "3.2.0"       //lib version
							 | 
						|||
| 
								 | 
							
								//#define USE_SOURCE_CODE                        //using source code to build
							 | 
						|||
| 
								 | 
							
								#if !defined(USE_SOURCE_CODE) && defined(_WIN32)
							 | 
						|||
| 
								 | 
							
								#define LUA_INTEGER         long long      //set LUA_INTEGER. In 501 is ptrdiff_t. 503 can set longlong(64bit) or int(32bit)
							 | 
						|||
| 
								 | 
							
								#define LUA_VERSION_NUM        503              //lua version used by WIN32 build lib. eg. 501,503
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								//setting end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if !defined(USE_SOURCE_CODE) && defined(_WIN32)
							 | 
						|||
| 
								 | 
							
								#include <Windows.h>
							 | 
						|||
| 
								 | 
							
								#include <Tlhelp32.h>
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								//2.如果lua源码是C++形式,注释掉下面extern "C"
							 | 
						|||
| 
								 | 
							
								extern "C"{
							 | 
						|||
| 
								 | 
							
								#include "lua.h"
							 | 
						|||
| 
								 | 
							
								#include "lualib.h"
							 | 
						|||
| 
								 | 
							
								#include "lauxlib.h"
							 | 
						|||
| 
								 | 
							
								#include "luaconf.h"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//3.如果lua代码在命名空间中,要设置用户命名空间. 防止找不到lua方法
							 | 
						|||
| 
								 | 
							
								//using namespace slua;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#ifdef USE_SOURCE_CODE
							 | 
						|||
| 
								 | 
							
								extern "C" void pdebug_init(lua_State* L);
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if !defined(USE_SOURCE_CODE) && defined(_WIN32)
							 | 
						|||
| 
								 | 
							
								/*
							 | 
						|||
| 
								 | 
							
								** Lua - An Extensible Extension Language
							 | 
						|||
| 
								 | 
							
								** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
							 | 
						|||
| 
								 | 
							
								** See Copyright Notice at the end of this file
							 | 
						|||
| 
								 | 
							
								*/
							 | 
						|||
| 
								 | 
							
								#if LUA_VERSION_NUM == 501
							 | 
						|||
| 
								 | 
							
								#define lua_getglobal(L,s)    lua_getfield(L, LUA_GLOBALSINDEX, (s))
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#define LUA_TNONE        (-1)
							 | 
						|||
| 
								 | 
							
								#define LUA_TNIL        0
							 | 
						|||
| 
								 | 
							
								#define LUA_TBOOLEAN        1
							 | 
						|||
| 
								 | 
							
								#define LUA_TLIGHTUSERDATA    2
							 | 
						|||
| 
								 | 
							
								#define LUA_TNUMBER        3
							 | 
						|||
| 
								 | 
							
								#define LUA_TSTRING        4
							 | 
						|||
| 
								 | 
							
								#define LUA_TTABLE        5
							 | 
						|||
| 
								 | 
							
								#define LUA_TFUNCTION        6
							 | 
						|||
| 
								 | 
							
								#define LUA_TUSERDATA        7
							 | 
						|||
| 
								 | 
							
								#define LUA_TTHREAD        8
							 | 
						|||
| 
								 | 
							
								#define LUA_NUMBER    double
							 | 
						|||
| 
								 | 
							
								#define LUA_REGISTRYINDEX    (-10000)
							 | 
						|||
| 
								 | 
							
								#define LUA_ENVIRONINDEX    (-10001)
							 | 
						|||
| 
								 | 
							
								#define LUA_GLOBALSINDEX    (-10002)
							 | 
						|||
| 
								 | 
							
								#define lua_upvalueindex(i)    (LUA_GLOBALSINDEX-(i))
							 | 
						|||
| 
								 | 
							
								#define LUA_IDSIZE    60
							 | 
						|||
| 
								 | 
							
								#define LUA_HOOKCALL    0
							 | 
						|||
| 
								 | 
							
								#define LUA_HOOKRET    1
							 | 
						|||
| 
								 | 
							
								#define LUA_HOOKLINE    2
							 | 
						|||
| 
								 | 
							
								#define LUA_HOOKCOUNT    3
							 | 
						|||
| 
								 | 
							
								#define LUA_HOOKTAILRET 4
							 | 
						|||
| 
								 | 
							
								#define LUA_MASKCALL    (1 << LUA_HOOKCALL)
							 | 
						|||
| 
								 | 
							
								#define LUA_MASKRET    (1 << LUA_HOOKRET)
							 | 
						|||
| 
								 | 
							
								#define LUA_MASKLINE    (1 << LUA_HOOKLINE)
							 | 
						|||
| 
								 | 
							
								#define LUA_MASKCOUNT    (1 << LUA_HOOKCOUNT)
							 | 
						|||
| 
								 | 
							
								#define luaL_checkstring(L,n)    (luaL_checklstring(L, (n), NULL))
							 | 
						|||
| 
								 | 
							
								#define lua_tostring(L,i)    lua_tolstring(L, (i), NULL)
							 | 
						|||
| 
								 | 
							
								#define lua_istable(L,n)    (lua_type(L, (n)) == LUA_TTABLE)
							 | 
						|||
| 
								 | 
							
								#define lua_isfunction(L,n)    (lua_type(L, (n)) == LUA_TFUNCTION)
							 | 
						|||
| 
								 | 
							
								#define lua_pop(L,n)        lua_settop(L, -(n)-1)
							 | 
						|||
| 
								 | 
							
								#define lua_newtable(L)        lua_createtable(L, 0, 0)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								struct lua_State;
							 | 
						|||
| 
								 | 
							
								struct lua_Debug {
							 | 
						|||
| 
								 | 
							
								    int event;
							 | 
						|||
| 
								 | 
							
								    const char *name;    /* (n) */
							 | 
						|||
| 
								 | 
							
								    const char *namewhat;    /* (n) `global', `local', `field', `method' */
							 | 
						|||
| 
								 | 
							
								    const char *what;    /* (S) `Lua', `C', `main', `tail' */
							 | 
						|||
| 
								 | 
							
								    const char *source;    /* (S) */
							 | 
						|||
| 
								 | 
							
								    int currentline;    /* (l) */
							 | 
						|||
| 
								 | 
							
								    int nups;        /* (u) number of upvalues */
							 | 
						|||
| 
								 | 
							
								    int linedefined;    /* (S) */
							 | 
						|||
| 
								 | 
							
								    int lastlinedefined;    /* (S) */
							 | 
						|||
| 
								 | 
							
								    char short_src[LUA_IDSIZE]; /* (S) */
							 | 
						|||
| 
								 | 
							
								    /* private part */
							 | 
						|||
| 
								 | 
							
								    int i_ci;  /* active function */
							 | 
						|||
| 
								 | 
							
								};
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								typedef LUA_INTEGER lua_Integer;
							 | 
						|||
| 
								 | 
							
								typedef LUA_NUMBER lua_Number;
							 | 
						|||
| 
								 | 
							
								typedef int (*lua_CFunction) (lua_State *L);
							 | 
						|||
| 
								 | 
							
								typedef struct luaL_Reg {
							 | 
						|||
| 
								 | 
							
								    const char *name;
							 | 
						|||
| 
								 | 
							
								    lua_CFunction func;
							 | 
						|||
| 
								 | 
							
								} luaL_Reg;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#define LUA_KCONTEXT	ptrdiff_t
							 | 
						|||
| 
								 | 
							
								typedef LUA_KCONTEXT lua_KContext;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//lua function
							 | 
						|||
| 
								 | 
							
								typedef lua_Integer(*luaDLL_checkinteger) (lua_State *L, int numArg);
							 | 
						|||
| 
								 | 
							
								typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
							 | 
						|||
| 
								 | 
							
								typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx);
							 | 
						|||
| 
								 | 
							
								typedef const lua_Number *(*luaDLL_version)(lua_State *L);
							 | 
						|||
| 
								 | 
							
								typedef void (*luaLDLL_register)(lua_State *L, const char *libname, const luaL_Reg *l);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_gettop)(lua_State *L);
							 | 
						|||
| 
								 | 
							
								typedef const char *(*luaDLL_pushstring)(lua_State *L, const char *s);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_settop)(lua_State *L, int idx);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_tointeger)(lua_State *L, int idx);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_next)(lua_State *L, int idx);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_pcall)(lua_State *L, int nargs, int nresults, int errfunc);
							 | 
						|||
| 
								 | 
							
								typedef void (*luaDLL_pushnil)(lua_State *L);
							 | 
						|||
| 
								 | 
							
								typedef void (*luaDLL_getfield)(lua_State *L, int idx, const char *k);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_getinfo)(lua_State *L, const char *what, void *ar);
							 | 
						|||
| 
								 | 
							
								typedef void  (*luaDLL_pushinteger) (lua_State *L, lua_Integer n);
							 | 
						|||
| 
								 | 
							
								#if LUA_VERSION_NUM == 501
							 | 
						|||
| 
								 | 
							
								typedef int(*luaDLL_sethook)(lua_State *L, void* func, int mask, int count);
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								typedef	void (*luaDLL_sethook)(lua_State *L, lua_Hook f, int mask, int count);
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								typedef void (*luaDLL_pushnumber)(lua_State *L, lua_Number n);
							 | 
						|||
| 
								 | 
							
								typedef lua_Number (*luaDLL_checknumber)(lua_State *L, int narg);
							 | 
						|||
| 
								 | 
							
								typedef const char *(*luaDLL_checklstring)(lua_State *L, int narg, size_t *len);
							 | 
						|||
| 
								 | 
							
								typedef const char *(*luaDLL_tolstring)(lua_State *L, int idx, size_t *len);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_type)(lua_State *L, int idx);
							 | 
						|||
| 
								 | 
							
								//5.3
							 | 
						|||
| 
								 | 
							
								typedef void (*luaDLL_createtable)(lua_State *L, int narray, int nrec);
							 | 
						|||
| 
								 | 
							
								typedef void (*luaDLL_setfuncs)(lua_State *L, const luaL_Reg *l, int nup);
							 | 
						|||
| 
								 | 
							
								typedef lua_Integer(*luaDLL_tointegerx)(lua_State *L, int idx, int *pisnum);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_getglobal)(lua_State *L, const char *name);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_pcallk)(lua_State *L, int nargs, int nresults, int msgh, lua_KContext ctx, lua_KFunction k);
							 | 
						|||
| 
								 | 
							
								typedef int (*luaDLL_toboolean)(lua_State *L, int index);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								luaDLL_checkinteger luaL_checkinteger;
							 | 
						|||
| 
								 | 
							
								luaDLL_version lua_version;
							 | 
						|||
| 
								 | 
							
								luaDLL_gettop lua_gettop;
							 | 
						|||
| 
								 | 
							
								luaDLL_pushstring lua_pushstring;
							 | 
						|||
| 
								 | 
							
								luaLDLL_register luaL_register;
							 | 
						|||
| 
								 | 
							
								luaDLL_settop lua_settop;
							 | 
						|||
| 
								 | 
							
								luaDLL_pcall lua_pcall;
							 | 
						|||
| 
								 | 
							
								luaDLL_pushnumber lua_pushnumber;
							 | 
						|||
| 
								 | 
							
								luaDLL_checklstring luaL_checklstring;
							 | 
						|||
| 
								 | 
							
								luaDLL_tointeger lua_tointeger;
							 | 
						|||
| 
								 | 
							
								luaDLL_pushnil lua_pushnil;
							 | 
						|||
| 
								 | 
							
								luaDLL_getfield lua_getfield;
							 | 
						|||
| 
								 | 
							
								luaDLL_next lua_next;
							 | 
						|||
| 
								 | 
							
								luaDLL_getinfo lua_getinfo;
							 | 
						|||
| 
								 | 
							
								luaDLL_sethook lua_sethook;
							 | 
						|||
| 
								 | 
							
								luaDLL_checknumber luaL_checknumber;
							 | 
						|||
| 
								 | 
							
								luaDLL_type lua_type;
							 | 
						|||
| 
								 | 
							
								luaDLL_tolstring lua_tolstring;
							 | 
						|||
| 
								 | 
							
								luaDLL_pushinteger lua_pushinteger;
							 | 
						|||
| 
								 | 
							
								luaDLL_toboolean lua_toboolean;
							 | 
						|||
| 
								 | 
							
								//
							 | 
						|||
| 
								 | 
							
								HMODULE hInstLibrary;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//slua-ue header
							 | 
						|||
| 
								 | 
							
								#if LUA_VERSION_NUM > 501
							 | 
						|||
| 
								 | 
							
								//5.3
							 | 
						|||
| 
								 | 
							
								luaDLL_createtable lua_createtable;
							 | 
						|||
| 
								 | 
							
								luaDLL_setfuncs luaL_setfuncs;
							 | 
						|||
| 
								 | 
							
								luaDLL_tointegerx lua_tointegerx;
							 | 
						|||
| 
								 | 
							
								luaDLL_getglobal lua_getglobal;
							 | 
						|||
| 
								 | 
							
								luaDLL_pcallk lua_pcallk;
							 | 
						|||
| 
								 | 
							
								#define lua_pcall(L,n,r,f)	lua_pcallk(L, (n), (r), (f), 0, NULL)
							 | 
						|||
| 
								 | 
							
								#define lua_tointeger(L,i) lua_tointegerx(L,(i),NULL);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#define PURE_API =0
							 | 
						|||
| 
								 | 
							
								namespace slua {
							 | 
						|||
| 
								 | 
							
									struct LuaInterface {
							 | 
						|||
| 
								 | 
							
										virtual const lua_Number *lua_version(lua_State *L) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual const char *lua_pushstring(lua_State *L, const char *s) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_gettop(lua_State *L) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual void lua_settop(lua_State *L, int index) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_pcallk(lua_State *L, int nargs, int nresults, int msgh, lua_KContext ctx, lua_KFunction k) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual void lua_pushnumber(lua_State *L, lua_Number n) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual const char *luaL_checklstring(lua_State *L, int arg, size_t *l) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual const char *lua_tolstring(lua_State *L, int index, size_t *len) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_type(lua_State *L, int index) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual lua_Integer lua_tointegerx(lua_State *L, int index, int *isnum) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual void lua_pushnil(lua_State *L) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_getfield(lua_State *L, int index, const char *k) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_next(lua_State *L, int index) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_getinfo(lua_State *L, const char *what, lua_Debug *ar) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual void lua_sethook(lua_State *L, lua_Hook f, int mask, int count) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual lua_Number luaL_checknumber(lua_State *L, int arg) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual void lua_createtable(lua_State *L, int narr, int nrec) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_getglobal(lua_State *L, const char *name) PURE_API;
							 | 
						|||
| 
								 | 
							
										virtual int lua_toboolean(lua_State *L, int index) PURE_API;
							 | 
						|||
| 
								 | 
							
									};
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								typedef  slua::LuaInterface* (*dll_GetLuaInterface)();
							 | 
						|||
| 
								 | 
							
								dll_GetLuaInterface getInter;
							 | 
						|||
| 
								 | 
							
								#endif //LUA_VERSION_NUM > 501
							 | 
						|||
| 
								 | 
							
								#endif //_WIN32
							 | 
						|||
| 
								 | 
							
								#endif //LIBPDEBUG_H
							 | 
						|||
| 
								 | 
							
								/******************************************************************************
							 | 
						|||
| 
								 | 
							
								* Copyright (C) 1994-2008 Lua.org, PUC-Rio.  All rights reserved.
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								* Permission is hereby granted, free of charge, to any person obtaining
							 | 
						|||
| 
								 | 
							
								* a copy of this software and associated documentation files (the
							 | 
						|||
| 
								 | 
							
								* "Software"), to deal in the Software without restriction, including
							 | 
						|||
| 
								 | 
							
								* without limitation the rights to use, copy, modify, merge, publish,
							 | 
						|||
| 
								 | 
							
								* distribute, sublicense, and/or sell copies of the Software, and to
							 | 
						|||
| 
								 | 
							
								* permit persons to whom the Software is furnished to do so, subject to
							 | 
						|||
| 
								 | 
							
								* the following conditions:
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								* The above copyright notice and this permission notice shall be
							 | 
						|||
| 
								 | 
							
								* included in all copies or substantial portions of the Software.
							 | 
						|||
| 
								 | 
							
								*
							 | 
						|||
| 
								 | 
							
								* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
							 | 
						|||
| 
								 | 
							
								* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
							 | 
						|||
| 
								 | 
							
								* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
							 | 
						|||
| 
								 | 
							
								* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
							 | 
						|||
| 
								 | 
							
								* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
							 | 
						|||
| 
								 | 
							
								* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
							 | 
						|||
| 
								 | 
							
								* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
							 | 
						|||
| 
								 | 
							
								******************************************************************************/
							 |