diff options
-rw-r--r-- | libs/core/luasrc/debug.lua | 27 | ||||
-rw-r--r-- | libs/web/luasrc/dispatcher.lua | 3 |
2 files changed, 28 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 + diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index fd2be1eb4..12093fe7a 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -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 |