赞
踩
lua_sethook(currL, exitLuaScript, LUA_MASKCALL , 0);
参数说明:
LUA_MASKCALL 调用函数时回调: 在调用一个函数对象之前,都会先调用luaD_precall,在这个函数里触发事件。
LUA_MASKRET 函数返回时回调:完成一个函数时,会先调用luaD_poscall,在这个函数里触发事件。
LUA_MASKLINE 执行一行时代码时回调,vmfetch中每执行一条指令,都会调用luaG_traceexec函数,在其中判断新行并触发事件
LUA_MASKCOUNT 每执行count条指令时回调,vmfetch中每执行一条指令,都会调用luaG_traceexec函数,在其中判断是否执行了count条件指令并触发事件。
static int exitLuaScript_flag = 0;
static jmp_buf place;
static void exitLuaScript(lua_State* L, lua_Debug *ar)
{
if(exitLuaScript_flag==1){
exitLuaScript_flag = 0;
longjmp(place, 1);
}
}
ret = setjmp(place);
if(ret==0){
//设置place,
}else{
//有值表示longjmp返回.
}
longjmp setjmp 使用demo
#include <stdio.h> #include <stdlib.h> #include <setjmp.h> jmp_buf env; int my_test(int a, int b) { if (b == 0) { printf("test 0\n"); longjmp(env, 1); } return a / b; } int main(int argc, char const *argv[]) { int res = setjmp(env); if (res == 0) { //执行my_func方法 printf("return from setjmp\n"); my_func(10, 0); } else {//遇到longjmp,则进入该分支 printf("return from longjmp: %d\n", res); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。