From e63d3f03eb1360c1d2c1bc58a343e2e8adc78ace Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Fri, 5 Sep 2008 20:32:20 +0000 Subject: [PATCH] Added memory tracer --- libs/core/luasrc/debug.lua | 27 +++++++++++++++++++++++++-- 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 -- 2.25.1