首先是开启监控器方法,向Global注入RawsetGlobal方法
function Profiler:StartMonitor(type)
self.MonitorType = type
self.MemoryState = {}
self.StartMemory = collectgarbage("count")
self.CurrentMemory = self.StartMemory
self.MonitorGlobal = {}
setmetatable(_G, { __newindex = Profiler.RawsetGlobal })
if type ~= self.MonitorType.Line or nil then
self.MonitorStartTime = os.clock()
self.FunctionTable = {}
debug.sethook(Profiler.FunctionMonitor,type.Type,0)
else
debug.sethook(Profiler.LineMonitor,type.Type,0)
end
end
function Profiler.RawsetGlobal(tb,k,v)
local t = {}
local info = debug.getinfo(2, "nlS")
t.CurrentLine = info.currentline
t.SrcFile = info.short_src
t.FunctionName = info.name or 'Anonymous'
t.Key = k
t.Value = v
Profiler.MonitorGlobal[k] = t
rawset(tb, k, v)
end