Variable Dump


#1

I’d like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using…

#!/usr/bin/env ruby

class Binding
def info_locals()
vars = eval(“local_variables”, self)
vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
end
end

def foo_def
inside_foo_def = “hello there”
binding.info_locals
end

foo = ‘hello’
bar = “goodbye”
array = [ ‘one’, ‘two’ ]

foo_def()

I get this output…

inside_foo_def --> “hello there”

That’s the problem. I do not get all variables, just the variable in
the def foo_def scope. I’d like to be able to grab foo, bar, and
array also, much like this…

inside_foo_def --> “hello there”
foo --> “hello”
bar --> “bar”
array --> [‘one’, ‘two’]

Thanks in advance.


#2

Dan Smorey Jr. removed_email_address@domain.invalid wrote:

end
foo_def()
foo --> “hello”
bar --> “bar”
array --> [‘one’, ‘two’]

Thanks in advance.

You would have to walk up the call stack to get locals of surrounding
environments. Kernel.set_trace_func may help here.

Kind regards

robert

#3

this clumsy script gets you part of the way there.
maybe somebody else knows a recursive solution.

#!/usr/bin/env ruby

$top_level = binding

class Binding
def info_vars(b = self)
vars = eval(“local_variables”, b)
vars.each { |v| puts %(#{v} --> #{eval(v, b).inspect}) }
end
end

def foo_def
inside_foo_def = “hello there”

 binding.info_vars
 puts "\n# top level:"
 binding.info_vars $top_level

end

foo = ‘hello’
bar = “goodbye”
array = [ ‘one’, ‘two’ ]
foo_def()