On Jun 20, 2006, at 0:18, lists wrote:

> $ cat the_test.rb
> require './lib'
>
> begin
>         MyClass.new.throws_an_exception
> rescue => e
>         puts e
> end
> $ ruby the_test.rb
> undefined method `non_existent_method' for #<MyClass:0x2560c>
>
> I don't get the rest of the backtrace (line number, etc.) unless I  
> use the -d flag:
>
> $ ruby -d the_test.rb
> Exception `NoMethodError' at ./lib.rb:3 - undefined method  
> `non_existent_method' for #<MyClass:0x2560c>
> undefined method `non_existent_method' for #<MyClass:0x2560c>
>
> Is there a way to get the "full" backtrace when calling  
> "the_test.rb" without using the -d flag?  I hope this makes sense.

The culprit is that you're rescuing the exception, and simply  
printing its name.  To get the whole backtrace, you could not rescue  
the exception in the first place, re-raise the exception, or print  
the backtrace manually.

matthew smillie.

begin
   MtClass.new.throws_an_exception
rescue => e
   puts "oops, an exception"
   raise e
end

begin
   MyClass.new.throws_an_exception
rescue => e
   puts e
   puts e.backtrace
end

Relevant docs are:
Kernel#raise: http://ruby-doc.org/core/classes/Kernel.html#M002948
Exception#backtrace: http://ruby-doc.org/core/classes/ 
Exception.html#M001216