debug.getinfo
Lua function

debug.getinfo

Summary

Returns a table with information about a function

Prototype

t = debug.getinfo (thread, f, what)



Description

Returns a table with information about a function. The optional field "what" is a string indicating which values to return (can be more than one). If omitted, all is returned.

The thread argument is optional and defaults to the current thread.

What fields can be one or more of the following concatenated together:


  • f - returns "func" field
  • l - returns "currentline" field
  • L - returns a table whose indices are the numbers of the lines that are valid on the function. (A valid line is a line with some associated code, that is, a line where you can put a break point. Non-valid lines include empty lines and comments.)
  • n - returns "name" and "namewhat" fields
  • S - returns "source", "short_src", "linedefined" and "what" fields
  • u - returns "nups" field


The function name can be an integer representing the stack level, where 0 is debug.getinfo itself, 1 is the function that called debug.getinfo, 2 is the function that called that, and so on. Returns nil if the function number is larger than the number of functions on the stack.

Field meanings of the returned table are:


  • source - where the function was defined. If in a file, it is the file name prefixed by "@".

    If the function was defined in a string (through loadstring) then "source" is this string.

    If the function was defined interactively (through the lua.exe program) then source will be "stdin".

    If the function was defined in a C program, then source will be "[C]".


  • short_src - a shorter version of "source" (up to 60 characters), useful for error messages

  • linedefined - the first line number, in the source, where this function was defined (for Lua functions).

  • lastlinedefined - the last line number, in the source, where this function was defined (for Lua functions).

  • what - what this function is. Can be "Lua" for a regular Lua function, "C" if it is a C function, or "main" if it is part of the main Lua chunk (ie. outside any function).

  • name - an attempt to find the name of the function - may be nil.

    Since functions can have many names (by assigning a function to many variables) or no name, the name cannot always be determined.

    Lua tries to find the name of the function by inspecting the call stack to find how the function was called. This can only work if debug.getinfo was called with a stack level number, not a function itself.

  • namewhat - what the "name" field means. It can be "global", "local", "method", "field", or the empty string (""). The empty string means Lua did not find the name, and thus the name field will not be present.

  • nups - the number of upvalues that this function has.

  • activelines - a table of the active lines of the function, that is ones which have code on them, as opposed to blank lines or comments. Each entry in table contains the line number as a key, and true as the value.

  • currentline - the line that is currently active (only applies to active functions, that is if the call to debug.getinfo is for a stack level).

  • func - the function that is active at that stack level (if called with a stack level).




t = debug.getinfo (table.sort)
table.foreach (t, print)

 -->

source =[C]
what C
func function: 02061360
short_src [C]
currentline -1
namewhat 
linedefined -1
nups 0

-- another example, this time a user-defined function --

function f (a, b, c) print "hi" end
t = debug.getinfo (f, "flnSu")  --> 'what' options explicitly mentioned
table.foreach (t, print)

 -->
 
source  =stdin
what    Lua
func    function: 0x8079a40
name    f
nups    0
currentline     -1
namewhat        global
linedefined     1
short_src       stdin

-- this example prints the name of the currently-running function --

function myfunc () print (debug.getinfo (1, "n").name) end
myfunc ()  --> myfunc

-- this example shows the active lines:

function f (a, b, c) 
print "hi" 
a = b + c
end
t = debug.getinfo (f, "L")
table.foreach (t.activelines, print)

 -->
 
2	true
3	true
4	true




See Also ...

Topics

DOC_lua_base Lua base functions
DOC_lua_bc Lua bc (big number) functions
DOC_lua_bit Lua bit manipulation functions
DOC_lua_coroutines Lua coroutine functions
DOC_lua_debug Lua debug functions
DOC_lua_io Lua io functions
DOC_lua_math Lua math functions
DOC_lua_os Lua os functions
DOC_lua_package Lua package functions
DOC_lua_rex Lua PCRE regular expression functions
DOC_lua Lua script extensions
DOC_lua_string Lua string functions
DOC_lua_tables Lua table functions
DOC_lua_utils Lua utilities
DOC_scripting Scripting

Lua functions

LUA_debug.debug debug.debug (Enters interactive debugging)
LUA_debug.getfenv debug.getfenv (Returns the environment of an object)
LUA_debug.gethook debug.gethook (Returns the current hook settings)
LUA_debug.getlocal debug.getlocal (Returns name and value of a local variable)
LUA_debug.getmetatable debug.getmetatable (Returns the metatable of the given object)
LUA_debug.getregistry debug.getregistry (Returns the registry table)
LUA_debug.getupvalue debug.getupvalue (Returns the name and value of an upvalue)
LUA_debug.setfenv debug.setfenv (Sets the environment of an object)
LUA_debug.sethook debug.sethook (Sets a debug hook function)
LUA_debug.setlocal debug.setlocal (Sets the value of the local variable)
LUA_debug.setmetatable debug.setmetatable (Sets the metatable for an object)
LUA_debug.setupvalue debug.setupvalue (Sets an upvalue for a function)
LUA_debug.traceback debug.traceback (Returns a string with a traceback of the stack call)

(Help topic: lua=debug.getinfo)

DOC_contents Documentation contents page