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 methodnon_existent_method’ for #MyClass:0x255bc (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 #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 methodnon_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.
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