summaryrefslogtreecommitdiffhomepage
path: root/libs/core/luasrc/debug.lua
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-09-05 20:32:20 +0000
committerSteven Barth <steven@midlink.org>2008-09-05 20:32:20 +0000
commite63d3f03eb1360c1d2c1bc58a343e2e8adc78ace (patch)
tree6e0d116d4bd3018947186d52d5d14b13c37b9313 /libs/core/luasrc/debug.lua
parentc08c0fdedea94c7e8695ec13b22bf9a25a656478 (diff)
Added memory tracer
Diffstat (limited to 'libs/core/luasrc/debug.lua')
-rw-r--r--libs/core/luasrc/debug.lua27
1 files changed, 25 insertions, 2 deletions
diff --git a/libs/core/luasrc/debug.lua b/libs/core/luasrc/debug.lua
index a56400f34..f991ab8a6 100644
--- a/libs/core/luasrc/debug.lua
+++ b/libs/core/luasrc/debug.lua
@@ -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
+