Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bindings at the time of Exceptions

0 views
Skip to first unread message

Adam Sanderson

unread,
Aug 11, 2005, 1:27:15 AM8/11/05
to
I always thought it would be neat to be able to get the binding at the
time an exception was raised so that one could see the state the stack
was in when an exception occurred.

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

Joel VanderWerf

unread,
Aug 11, 2005, 1:47:11 AM8/11/05
to

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


Joel VanderWerf

unread,
Aug 11, 2005, 1:58:30 AM8/11/05
to
Joel VanderWerf wrote:
> No trickery, but you do have to have the cooperation of the code which
> raises:

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

Robert Klemme

unread,
Aug 11, 2005, 4:12:02 AM8/11/05
to
Adam Sanderson wrote:
> I always thought it would be neat to be able to get the binding at the
> time an exception was raised so that one could see the state the stack
> was in when an exception occurred.

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

Lothar Scholz

unread,
Aug 11, 2005, 6:15:19 AM8/11/05
to
Hello Adam,

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

Adam Sanderson

unread,
Aug 11, 2005, 1:39:11 PM8/11/05
to
Well that's the trick of course ;) Being able to view the variables
without explicity entering the binding when you create the exception.

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

0 new messages