I'm working on a C extension and somewhere in itsomething is raising a NoMethodError. The exception is reported with the line of ruby code that triggered the bad call in the C extension.
As the C code is large and complex (it's a big SWIG project), I'm having trouble finding the problem in the C code. I would use gdb or Microsoft's debugger to look at the stack if it was a C error - but when a Ruby exception is raised, the process exits and there's no stack to inspect.
Ruby's debugger isn't helpful because it only knows about ruby written in ruby.
Is there any way I can get at the C stack at the point of ruby 'raise' from a C extension?
On 7/12/07, Alex Fenton <aff28@deleteme.cam.ac.uk> wrote:
Hi
I'm working on a C extension and somewhere in itsomething is raising a
NoMethodError. The exception is reported with the line of ruby code that
triggered the bad call in the C extension.
As the C code is large and complex (it's a big SWIG project), I'm having
trouble finding the problem in the C code. I would use gdb or
Microsoft's debugger to look at the stack if it was a C error - but when
a Ruby exception is raised, the process exits and there's no stack to
inspect.
Ruby's debugger isn't helpful because it only knows about ruby written
in ruby.
Is there any way I can get at the C stack at the point of ruby 'raise'
from a C extension?
i don't know how to build stack traces, but you can start ruby in gdb.
first call gdb with ruby as argument. On liux it looks like:
det@datengrab:~/Desktop$ gdb /usr/bin/ruby
and then in gdb start your ruby program with "run"
(gdb) run ./my-prg.rb
Cheers
detlef
···
Am Donnerstag, den 12.07.2007, 23:10 +0900 schrieb Alex Fenton:
Hi
I'm working on a C extension and somewhere in itsomething is raising a
NoMethodError. The exception is reported with the line of ruby code that
triggered the bad call in the C extension.
As the C code is large and complex (it's a big SWIG project), I'm having
trouble finding the problem in the C code. I would use gdb or
Microsoft's debugger to look at the stack if it was a C error - but when
a Ruby exception is raised, the process exits and there's no stack to
inspect.
Ruby's debugger isn't helpful because it only knows about ruby written
in ruby.
Is there any way I can get at the C stack at the point of ruby 'raise'
>from a C extension?
I'm working on a C extension and somewhere in itsomething is raising a NoMethodError. The exception is reported with the line of ruby code that triggered the bad call in the C extension.
As the C code is large and complex (it's a big SWIG project), I'm having trouble finding the problem in the C code. I would use gdb or Microsoft's debugger to look at the stack if it was a C error - but when a Ruby exception is raised, the process exits and there's no stack to inspect.
Ruby's debugger isn't helpful because it only knows about ruby written in ruby.
Is there any way I can get at the C stack at the point of ruby 'raise' from a C extension?
Thanks
alex
--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama
Thanks for the pointer - that's really interesting stuff. I got round it a bit more prosaically by simply setting a breakpoint in gdb where ruby calls the exception raising class
(gdb) b rb_exc_raise
Breakpoint 1, rb_exc_raise (mesg=3057353380) at eval.c:4583
4583 rb_longjmp(TAG_RAISE, mesg);
(gdb) whe
.... tasty stacktrace
cheers
alex
···
On 7/12/07, Alex Fenton <aff28@deleteme.cam.ac.uk> wrote:
I'm working on a C extension and somewhere in itsomething is raising a NoMethodError. The exception is reported with the line of ruby code that triggered the bad call in the C extension.
As the C code is large and complex (it's a big SWIG project), I'm having trouble finding the problem in the C code. I would use gdb or Microsoft's debugger to look at the stack if it was a C error - but when a Ruby exception is raised, the process exits and there's no stack to inspect.
Ruby's debugger isn't helpful because it only knows about ruby written in ruby.
Is there any way I can get at the C stack at the point of ruby 'raise' from a C extension?