It would be nice list the local variables and values at the time of the
exception for instance. Can anyone think of some trickery to do this?
I think it would be of great use for debugging and whatnot, and
massive points for cool ruby hackery ;)
.adam sanderson
No trickery, but you do have to have the cooperation of the code which
raises:
def foo
a = "value of a"
raise StandardError, binding
end
def bar
foo
rescue => e
return e.message
end
b = bar
p b
p eval("a", b)
p eval("local_variables", b)
__END__
output:
#<Binding:0xb7e31a5c>
"value of a"
["a"]
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
And just for fun, because it's late here...
def foo
a = "value of a"
cc = nil
callcc{|cc|}
if a
raise StandardError, binding
else
return "normally"
end
end
def bar
foo
rescue => e
return e.message
end
b = bar
case b
when Binding
eval("a=nil", b)
eval("cc", b).call
else
puts "Exiting #{b}"
end
Note, that you can view the stack trace already with standard means:
10:11:06 [c]: ruby -e 'def f() raise "error" end; begin;f;rescue Exception
=> e; puts e.backtrace; end'
-e:1:in `f'
-e:1
> It would be nice list the local variables and values at the time of
> the exception for instance. Can anyone think of some trickery to do
> this? I think it would be of great use for debugging and whatnot, and
> massive points for cool ruby hackery ;)
> .adam sanderson
See Joel's solution.
Kind regards
robert
AS> I always thought it would be neat to be able to get the binding at the
AS> time an exception was raised so that one could see the state the stack
AS> was in when an exception occurred.
AS> It would be nice list the local variables and values at the time of the
AS> exception for instance. Can anyone think of some trickery to do this?
AS> I think it would be of great use for debugging and whatnot, and
AS> massive points for cool ruby hackery ;)
AS> .adam sanderson
Yes indeed and it is not possible with standart ruby at the moment.
But if you want it, then download ArachnoRuby from http://www.ruby-ide.com.
It just does what you want and it also automatically starts a post mortem
debugger when an unhandled exception terminats the program. So it is
easy to inspect the values.
--
Best regards, emailto: scholz at scriptolutions dot com
Lothar Scholz http://www.ruby-ide.com
CTO Scriptolutions Ruby, PHP, Python IDE 's
I tried to think of some way to overide raise in the Kernel and add
some functionality to Exception, but didn't really get anywhere.
.adam