21d3294c |
1 | -- trace calls |
2 | -- example: lua -ltrace-calls bisect.lua |
3 | |
4 | local level=0 |
5 | |
6 | local 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") |
29 | end |
30 | |
31 | debug.sethook(hook,"cr") |
32 | level=0 |