Added memory tracer
authorSteven Barth <steven@midlink.org>
Fri, 5 Sep 2008 20:32:20 +0000 (20:32 +0000)
committerSteven Barth <steven@midlink.org>
Fri, 5 Sep 2008 20:32:20 +0000 (20:32 +0000)
libs/core/luasrc/debug.lua
libs/web/luasrc/dispatcher.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
+
index fd2be1e..12093fe 100644 (file)
@@ -112,11 +112,14 @@ function httpdispatch(request)
        end
        
        luci.http.close()
+
+       --context._disable_memtrace()
 end
 
 --- Dispatches a LuCI virtual path.
 -- @param request      Virtual path
 function dispatch(request)
+       --context._disable_memtrace = require "luci.debug".trap_memtrace()
        local ctx = context
        ctx.path = request