2 * trace.c -- a simple execution tracer for Lua
11 static FILE* LOG
; /* log file */
12 static int I
=0; /* indentation level */
14 static void hook(lua_State
*L
, lua_Debug
*ar
)
19 case LUA_HOOKTAILRET
: ar
->event
=LUA_HOOKRET
;
20 case LUA_HOOKRET
: s
="return"; break;
21 case LUA_HOOKCALL
: s
="call"; break;
22 case LUA_HOOKLINE
: s
="line"; break;
25 fprintf(LOG
,"[%d]\t%*s%s\t-- %d\n",I
,I
,"",s
,ar
->currentline
);
26 if (ar
->event
==LUA_HOOKCALL
) ++I
; else if (ar
->event
==LUA_HOOKRET
) --I
;
29 static void start_trace(lua_State
*L
, FILE* logfile
)
31 lua_sethook(L
,hook
,LUA_MASKCALL
| LUA_MASKRET
| LUA_MASKLINE
, 0);
35 static void stop_trace(lua_State
*L
)
37 lua_sethook(L
,NULL
,0,0);
44 lua_State
*L
=lua_open();
51 start_trace(L
,stderr
);
52 rc
=lua_dofile(L
,NULL
);