lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Am 25.07.2013 00:33 schröbte jseb:

#!/usr/bin/env lua

function foo()
   local local_var_foo = true
end

function search_local()
   for stack_level = 1,3 do
     for loc = 1,5 do
       name,value = debug.getlocal(stack_level,loc)
       if (name) then
         print(string.format(
         "%d,%d = %s (%s)",stack_level,loc,name,value))
       end
     end
   end
end

search_local()


Where is «local_var_foo» ?

A local variable is created when a "local" statement is executed, and destroyed when the block containing said "local" statement is left. You never call function `foo()`, so the `local local_var_foo` statement is never executed and the local variable never created.

Try this instead:

    function foo()
local local_var_foo = true --> local created here (when foo is called)
      search_local()
    end  --> local destroyed here

    foo()

If you want to examine locals without creating them you need to inspect the bytecode of the compiled functions using the extra library lbci[1] (also available via luarocks).

  [1]:  http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lbci


Could somebody explain to me how «debug.getlocal» works ?


Thank you.


HTH,
Philipp