Bugs item #1251, was opened at 2004-12-23 14:55
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=1251&group_id=426

Category: Core
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Paul Brannan (cout)
Assigned to: Nobody (None)
Summary: backtrace lost when throwing exceptions from procs defined in extensions

Initial Comment:
If I have an extension like this:

[pbrannan@zaphod ext]$ cat test.c
#include <ruby.h>

VALUE p = Qnil;

VALUE foo(VALUE self)
{
  VALUE args[] = { rb_str_new2("foo") };
  rb_funcall3(p, rb_intern("call"), 1, args);
}

VALUE myproc(VALUE arg, VALUE data, VALUE self)
{
  Check_Type(Qnil, T_ARRAY); /* throw an exception */
}

void Init_test()
{
  p = rb_proc_new(myproc, Qnil);
  rb_define_method(rb_cObject, "foo", foo, 0);
}

I would expect to get a usable stack trace from the following ruby script (showing that test.rb:11 called baz called bar called foo):
[pbrannan@zaphod ext]$ cat test.rb
require 'test.so'

def bar
  foo()
end

def baz
  bar()
end

baz()

But I do not:
[pbrannan@zaphod ext]$ ruby -v test.rb
ruby 1.8.2 (2004-12-22) [i686-linux]
./test.so: wrong argument type nil (expected Array) (TypeError)

In more complex programs I have seen this bug cause ruby to show that an exception that's raised in one place in my program as if it were raised in a completely different place.

This bug occurs on both 1.8.1 and 1.8.2preview4.


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=1251&group_id=426