Biblioteca standard debug oferă acces intern la stiva de execuție, variabilele locale și mașina virtuală Lua. Deși este destinată depanării și instrumentării de cod, funcțiile sale sunt esențiale pentru construirea de cadre de testare, loggere avansate și profilere de performanță.
Inspecția stivei de apeluri și metadatelor de funcție cu debug.getinfo
local function functieExemplu(param1, param2)
-- Nivelul 1 reprezintă funcția curentă, nivelul 2 este apelantul ei:
local info = debug.getinfo(1, "nSl")
print("Numele funcției:", info.name) -- "functieExemplu"
print("Sursa fișierului:", info.short_src) -- cale fișier sau string
print("Linia curentă de cod:", info.currentline)
print("Ce tip de cod este:", info.what) -- "Lua" sau "C"
end
functieExemplu("test", 123)
Inspectarea variabilelor locale din stivă cu debug.getlocal
local function calculeazaTotal(pret, tva)
local coeficient = 1.19
local total = (pret + tva) * coeficient
-- Iterăm prin toate variabilele locale ale nivelului 1:
local index = 1
while true do
local nume, valoare = debug.getlocal(1, index)
if not nume then break end
print(string.format("Variabilă locală [%d]: %s = %s", index, nume, tostring(valoare)))
index = index + 1
end
return total
end
calculeazaTotal(100, 20)
Avertisment de performanță: Funcțiile din biblioteca
debug dezactivează anumite optimizări ale compilatorului JIT și au un cost de rulare ridicat. Nu le folosiți în bucle critice de producție decât pentru logarea excepțiilor.