From: Justin Collins Date: 2006-06-20T08:32:53+09:00 Subject: Re: Where's the backtrace? lists wrote: > I'm probably misunderstanding the way things are supposed to work. > Here's what I'm seeing: > > $ cat lib.rb > class MyClass > def throws_an_exception > self.non_existent_method > end > end > > if __FILE__ == $0 > MyClass.new.throws_an_exception > end > $ ruby lib.rb > lib.rb:3:in `throws_an_exception': undefined method > `non_existent_method' for # (NoMethodError) > from lib.rb:8 > > So far, this is what I expect. Now consider: > > $ 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 # > > 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 # > undefined method `non_existent_method' for # > > Is there a way to get the "full" backtrace when calling "the_test.rb" > without using the -d flag? I hope this makes sense. > > Thanks, > Ryan > > Check out the documentation for the Exception class: http://ruby-doc.org/core/classes/Exception.html There is a method for retrieving the backtrace. Try this: begin MyClass.new.throws_an_exception rescue => e puts e puts e.backtrace.join("\n") end -Justin