Garry's Mod Wiki


  string, any debug.getlocal( thread thread = Current thread, number level, number index )


We advise against using this. It may be changed or removed in a future update.

Gets the name and value of a local variable indexed from the level.

When a function has a tailcall return, you cannot access the locals of this function.


1 thread thread = Current thread
The thread
2 number level
The level above the thread.
  • 0 = the function that was called (most always this function)'s arguments
  • 1 = the thread that had called this function.
  • 2 = the thread that had called the function that started the thread that called this function.

A function defined in Lua can also be passed as the level. The index will specify the parameter's name to be returned (a parameter will have a value of nil).

3 number index
The variable's index you want to get.
  • 1 = the first local defined in the thread
  • 2 = the second local defined in the thread
  • etc...


1 string
The name of the variable.

Sometimes this will be (*temporary) if the local variable had no name.

Variables with names starting with ( are internal variables.
2 any
The value of the local variable.


Gets all the local variables of the current thread and stores them in a table.

local varA = 1 local varB local locals = {} local i = 1 while ( true ) do local name, value = debug.getlocal( 1, i ) if ( name == nil ) then break end locals[i] = { name = name, value = value, } i = i + 1 end for k, v in pairs( locals ) do print(, "=", v.value) end
varA = 1 varB = nil locals = table: 0xa78f5ab2 i = 4


Prints the parameter names for hook.Add.

local print = print local getlocal = debug.getlocal local function PrintFunctionParameters( func ) local k = 2 local param = getlocal( func, 1 ) while param ~= nil do print( param ) param = getlocal( func, k ) k = k + 1 end end PrintFunctionParameters( hook.Add )
event_name name func