1-- trace calls 2-- example: lua -ltrace-calls bisect.lua 3 4local level=0 5 6local function hook(event) 7 local t=debug.getinfo(3) 8 io.write(level," >>> ",string.rep(" ",level)) 9 if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end 10 t=debug.getinfo(2) 11 if event=="call" then 12 level=level+1 13 else 14 level=level-1 if level<0 then level=0 end 15 end 16 if t.what=="main" then 17 if event=="call" then 18 io.write("begin ",t.short_src) 19 else 20 io.write("end ",t.short_src) 21 end 22 elseif t.what=="Lua" then 23-- table.foreach(t,print) 24 io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">") 25 else 26 io.write(event," ",t.name or "(C)"," [",t.what,"] ") 27 end 28 io.write("\n") 29end 30 31debug.sethook(hook,"cr") 32level=0 33