From: noreply@... Date: 2004-12-24T04:57:12+09:00 Subject: [ ruby-Bugs-1251 ] backtrace lost when throwing exceptions from procs defined in extensions 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 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