Added memory tracer
[project/luci.git] / libs / core / luasrc / debug.lua
index a56400f..f991ab8 100644 (file)
@@ -1,2 +1,25 @@
-module("luci.debug", package.seeall)
-__file__ = debug.getinfo(1, 'S').source:sub(2)
\ No newline at end of file
+local debug = require "debug"
+local io = require "io"
+local collectgarbage = collectgarbage
+
+module "luci.debug"
+__file__ = debug.getinfo(1, 'S').source:sub(2)
+
+-- Enables the memory tracer with given flags and returns a function to disable the tracer again
+function trap_memtrace(flags)
+       flags = flags or "l"
+       local tracefile = io.open("/tmp/memtrace", "w")
+
+       local function trap(what, line)
+               local info = debug.getinfo(2, "Sn")
+               tracefile:write(info.source..":"..line.."\t"..(info.namewhat or "").."\t"..(info.name or "").."\t"..collectgarbage("count").."\n")
+       end
+
+       debug.sethook(trap, flags)
+
+       return function()
+               debug.sethook()
+               tracefile:close()
+       end
+end
+