d64700e0e17179267f85046c8aabbadb80001734
[project/luci.git] / libs / core / luasrc / debug.lua
1 local debug = require "debug"
2 local io = require "io"
3 local collectgarbage = collectgarbage
4
5 module "luci.debug"
6 __file__ = debug.getinfo(1, 'S').source:sub(2)
7
8 -- Enables the memory tracer with given flags and returns a function to disable the tracer again
9 function trap_memtrace(flags, dest)
10         flags = flags or "clr"
11         local tracefile = io.open(dest or "/tmp/memtrace", "w")
12
13         local function trap(what, line)
14                 local info = debug.getinfo(2, "Sn")
15                 if tracefile then
16                         tracefile:write(
17                                 "[", what, "] ", info.source, ":", (line or "?"), "\t",
18                                 (info.namewhat or ""), "\t",
19                                 (info.name or ""), "\t",
20                                 collectgarbage("count"), "\n"
21                         )
22                 end
23         end
24
25         debug.sethook(trap, flags)
26
27         return function()
28                 debug.sethook()
29                 tracefile:close()
30         end
31 end
32