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
- - -

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

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:

···

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

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@dos32.com>
Organization: Ralph Shnelvar
Reply-To: <ruby-talk@ruby-lang.org>
Date: Thu, 29 Jul 2010 06:09:07 +0900
To: ruby-talk ML <ruby-talk@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:

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

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/\.