From: ts Date: 2001-05-18T17:54:03+09:00 Subject: [ruby-talk:15359] Re: newbie question: debugging >>>>> "R" == Ram Kochhar writes: R> I tried debugging using R> ruby -r debug share.rb R> but I can not step into the c code using step. debug.rb can debug only ruby code. If you want to debug C code, you must use gdb. A little example on linux : pigeon% gdb ruby GNU gdb 5.0 Copyright 2000 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) set li 32 (gdb) b dln_load Breakpoint 1 at 0x80b11ca: file dln.c, line 1258. (gdb) r -rShare -e 'p 1' Starting program: /usr/local/bin/ruby -rShare -e 'p 1' Breakpoint 1, dln_load (file=0x8100f28 "./Share.so") at dln.c:1258 1258 init_funcname(buf, file); (gdb) n 1274 if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) { (gdb) n 1278 if ((init_fct = (void(*)())dlsym(handle, buf)) == NULL) { (gdb) n 1282 (*init_fct)(); (gdb) b Init_Share Breakpoint 2 at 0x40017891: file Share.c, line 7. (gdb) c Continuing. Breakpoint 2, Init_Share () at Share.c:7 7 rb_define_variable("$hardware", &hardware_list); (gdb) l 1 #include "ruby.h" 2 3 VALUE hardware_list; 4 5 void Init_Share(){ 6 hardware_list = rb_ary_new(); 7 rb_define_variable("$hardware", &hardware_list); 8 /* 9 * push some elts into array 10 */ 11 rb_ary_push(hardware_list, rb_str_new2("DVD")); 12 rb_ary_push(hardware_list, rb_str_new2("CDPlayer1")); 13 rb_ary_push(hardware_list, rb_str_new2("CDPlayer2")); 14 15 } (gdb) You must re-enable the break each time you re-run the code, i.e (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /usr/local/bin/ruby -rShare -e 'p 1' Error in re-setting breakpoint 2: Function "Init_Share" not defined. Error in re-setting breakpoint 2: Function "Init_Share" not defined. Error in re-setting breakpoint 2: Function "Init_Share" not defined. Error in re-setting breakpoint 2: Function "Init_Share" not defined. Error in re-setting breakpoint 2: Function "Init_Share" not defined. Breakpoint 1, dln_load (file=0x8100f28 "./Share.so") at dln.c:1258 1258 init_funcname(buf, file); (gdb) n 1274 if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) { (gdb) n 1278 if ((init_fct = (void(*)())dlsym(handle, buf)) == NULL) { (gdb) ena 2 (gdb) c Continuing. Breakpoint 2, Init_Share () at Share.c:7 7 rb_define_variable("$hardware", &hardware_list); (gdb) Guy Decoux