_ERRORMESSAGE to get a stack traceback and you can modify _ALERT to call debug so that you can examine global variables when an error occurs. With a little more code you can even dump out the local variables.[1]
This code[2] has a bug in it.
1 require'simpledebugger.lua'
2
3 function here( t, str, pat )
4 assert( type(t,'table'), 'expecting a table' )
5 assert( type(str,'string'), 'expecting a string' )
6 pat = pat or '$(%b<>)'
7 local f = function(w)
8 local m = t[strsub(w,2,-2)] or w
9 if type(m,'function') then m = m(t) end
10 return tostring(m)
11 end
12 return( gsub( str, pat, f ) )
13 end
14
15 temp = [[
16 this is a $<x> for $<y>
17 ]]
18 local tab = { x = 'test', y = 'fun' }
19 write( here( tab, temp ) )
20 write( here( temp, tab ) )
21 print"game over"
$ lua -v testdebugger.lua Lua 4.1 (work4) Copyright (C) 1994-2001 TeCGraf, PUC-Rio this is a test for fun error: assertion failed! expecting a table stack traceback: 1: function `assert' [C] 2: function `here' at line 4 [file `testdebugger.lua'] 3: main of file `testdebugger.lua' at line 20 lua_debug>
lua_debug> locals(2)
t = " \
this is a $<x> for $<y>\
"
str = { -- table: 0x80649b8
y = "fun",
x = "test"
}
pat = nil
lua_debug>
cont to quit out of debug.
lua_debug> locals(3)
tab = { -- table: 0x80649b8
y = "fun",
x = "test"
}
lua_debug> cont
stop"it" just after line 8, we can inspect the variables in the function here.
$ lua -v testdebugger.lua Lua 4.1 (work4) Copyright (C) 1994-2001 TeCGraf, PUC-Rio error: it stack traceback: 1: function <7:file `testdebugger.lua'> at line 9 2: function `gsub' [C] 3: function `here' at line 13 [file `testdebugger.lua'] 4: main of file `testdebugger.lua' at line 20 lua_debug> locals() w = "<x>" m = "test" lua_debug> cont error: it stack traceback: 1: function <7:file `testdebugger.lua'> at line 9 2: function `gsub' [C] 3: function `here' at line 13 [file `testdebugger.lua'] 4: main of file `testdebugger.lua' at line 20 lua_debug> locals() w = "<y>" m = "fun" lua_debug> cont this is a test for fun game over