Let’s say I’m running rubyw and a RunTimeError is raised …
and I’m using FXRuby (which is tangential to this question) …
and I want to put up a errorbox …
But I want to capture the error message that would normally go to
stdout, i.e. the call stack …
How would I capture the call stack to a string in a raised exception?
begin
raise RuntimeError, “Something bad happened”
rescue
What do I do here?
end
begin
puts 1/0
rescue Exception, NameError => e
print “this is an error [#{e}]”
print $!.inspect #Ruby places a reference to the associated Exception
object into the global variable $!
end
output: this is an error [divided by 0]#<ZeroDivisionError: divided by
0>
Joseph,
This does not give the call stack with file names and line numbers of
the exception.
Thanks.
Ralph
Wednesday, July 28, 2010, 2:58:20 PM, you wrote:
JES> begin
JES> puts 1/0
JES> rescue Exception, NameError => e
JES> print “this is an error [#{e}]”
JES> print $!.inspect Ruby places a reference to the associated
Exception
JES> object into the global variable $!
JES> end
JES> output: this is an error [divided by 0]#<ZeroDivisionError: divided
by 0>
From: Ralph S. [email protected]
Organization: Ralph S.
Reply-To: [email protected]
Date: Thu, 29 Jul 2010 05:44:36 +0900
To: ruby-talk ML [email protected]
Subject: rubyw, RuntimeError, capturing the stack, FXRuby
Let’s say I’m running rubyw and a RunTimeError is raised …
and I’m using FXRuby (which is tangential to this question) …
and I want to put up a errorbox …
But I want to capture the error message that would normally go to stdout, i.e.
the call stack …
How would I capture the call stack to a string in a raised exception?
Ralph S. wrote:
This does not give the call stack with file names and line numbers of
the exception.
Use Exception#backtrace:
irb(main):001:0> begin
irb(main):002:1* raise “Error”
irb(main):003:1> rescue => e
irb(main):004:1> puts e.backtrace
irb(main):005:1> end
(irb):2:in irb_binding' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/workspace.rb:80:in
eval’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/workspace.rb:80:in
evaluate' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/context.rb:216:in
evaluate’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:157:in block (2 levels) in eval_input' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:271:in
signal_status’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:154:in block in eval_input' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/ruby-lex.rb:244:in
block
(2 levels) in each_top_level_statement’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in loop' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in
block
in each_top_level_statement’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in
catch' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in
each_top_level_statement’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:153:in eval_input' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:70:in
block in start’
/opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:69:in catch' /opt/rubies/ruby-1.9.1-p429/lib/ruby/1.9.1/irb.rb:69:in
start’
/home/marvin/Programmieren/Programme/irb_/irb_.rb:37:in `’
=> nil
irb(main):006:0>
Vale,
Marvin
Sorry…
Des this help?
begin
puts 1/0
rescue Exception, NameError => e
print “this is an error [#{e}] ----->[#{e.backtrace}]<-------”
print $!.inspect #Ruby places a reference to the associated Exception
object into the global variable $!
end
this is an error [divided by 0]
----->[/Users/jes/error.rb:2:in `/’/Users/jes/error.rb:2]<-------
#<ZeroDivisionError: divided by 0>