From: Ralph Shnelvar on
[Note: parts of this message were removed to make it a legal post.]

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
- - -
From: Joseph E. Savard on
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>



> From: Ralph Shnelvar <ralphs(a)dos32.com>
> Organization: Ralph Shnelvar
> Reply-To: <ruby-talk(a)ruby-lang.org>
> Date: Thu, 29 Jul 2010 05:44:36 +0900
> To: ruby-talk ML <ruby-talk(a)ruby-lang.org>
> 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?
>
> - - -
> begin
> raise RuntimeError, "Something bad happened"
> rescue
> # What do I do here?
> end
> - - -


From: Ralph Shnelvar on
[Note: parts of this message were removed to make it a legal post.]

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 Shnelvar <ralphs(a)dos32.com>
>> Organization: Ralph Shnelvar
>> Reply-To: <ruby-talk(a)ruby-lang.org>
>> Date: Thu, 29 Jul 2010 05:44:36 +0900
>> To: ruby-talk ML <ruby-talk(a)ruby-lang.org>
>> 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?

>> - - -
>> begin
>> raise RuntimeError, "Something bad happened"
>> rescue
>> # What do I do here?
>> end
>> - - -





--
Best regards,
Ralph mailto:ralphs(a)dos32.com
From: Joseph E. Savard on
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>

> From: Ralph Shnelvar <ralphs(a)dos32.com>
> Organization: Ralph Shnelvar
> Reply-To: <ruby-talk(a)ruby-lang.org>
> Date: Thu, 29 Jul 2010 06:09:07 +0900
> To: ruby-talk ML <ruby-talk(a)ruby-lang.org>
> Subject: Re: rubyw, RuntimeError, capturing the stack, FXRuby
>
> 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 Shnelvar <ralphs(a)dos32.com>
>>> Organization: Ralph Shnelvar
>>> Reply-To: <ruby-talk(a)ruby-lang.org>
>>> Date: Thu, 29 Jul 2010 05:44:36 +0900
>>> To: ruby-talk ML <ruby-talk(a)ruby-lang.org>
>>> 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?
>
>>> - - -
>>> begin
>>> raise RuntimeError, "Something bad happened"
>>> rescue
>>> # What do I do here?
>>> end
>>> - - -
>
>
>
>
>
> --
> Best regards,
> Ralph mailto:ralphs(a)dos32.com


From: Marvin Gülker on
Ralph Shnelvar 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 `<main>'
=> nil
irb(main):006:0>

Vale,
Marvin
--
Posted via http://www.ruby-forum.com/.