>> Запуск интерактивного отладчика debug.debug() >> Получение отладочного хука для текущего потока hook_func, hook_mask, hook_count = debug.gethook([thread]) >> Установка отладочного хука debug.sethook ([thread,] hook, mask [, count]) mask: c=call, r=return, l=line, c=count >> Получение информации tab = debug.getinfo ([thread,] stack_level [, what]) Значения what: 'n' - selects fields name and namewhat 'f' - selects field func 'S' - selects fields source, short_src, what, and linedefined 'l' - selects field currentline 'u' - selects field nup Пример: local info = debug.getinfo(level, "Sl") Внутри таблицы есть поля: - source - short_src - linedefined - what ("main", "Lua", "C") - name - namewhat ("global", "local", "method", "field", "") - nups - func -- return name of current function debug.getinfo(1,"n").name -- return table for print() debug.getinfo(print) >> Получение имени и значения переменной name, value = debug.getlocal([thread,] stack_level, local_idx) Пример: local name, value = debug.getlocal(1, a) >> Обратная функция установки значения debug.setlocal ([thread,] level, local, value) >> Получение метатаблицы tab debug.getmetatable(value) >> Обратная функция - установка метатаблицы debug.setmetatable(value, table) >> Дополнительная функция установки одной строки метатаблицы debug.setupvalue (f, up, value) >> Получение таблицы регстров debug.getregistry() >> Получение значения userdata debug.getuservalue(udata) >> Обратная функция - установка userdata debug.setuservalue(udata, value) >> Получение трассировки debug.traceback([thread,] [message [, level]]) >> Получение id usedate для значения с номером n внутри функции f debug.upvalueid(f, n) >> Связка n1 внутри closure f1 к n2 внутри f2 и т.д. debug.upvaluejoin(f1, n1, f2, n2) Пример функции трассировки всего стека вызовов: function traceback() local level = 1 while true do local info = debug.getinfo(level, "Sl") if not info then break end -- is a C function? if info.what == "C" then print(level, "C function") else -- a Lua function print(string.format("[%s]:%d", info.short_src, info.currentline)) end level = level + 1 end end Пример установки трассировки для каждой строки: function trace (event, line) local s = debug.getinfo(2).short_src print(s .. ":" .. line) end debug.sethook(trace, "l")
Lua Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor