From: Ram Kochhar Date: 2001-05-19T14:12:50+09:00 Subject: [ruby-talk:15389] Re: newbie question: debugging Hi, Thanks for the help. But I am having trouble using gdb. Here is the pertinent info -------my dir------- [ram@localhost ex2]$ ls Makefile debug.txt run share.o share.txt Share.so extconf.rb share.c share.rb ------code works -------- [ram@localhost ex2]$ ruby share.rb in share.rb DVD CDPlayer1 CDPlayer2 --------system info ---------- [ram@localhost ex2]$ uname -a Linux localhost.localdomain 2.2.15-4mdk #1 Wed May 10 15:31:30 CEST 2000 i586 unknown --------try using gdb----------- [ram@localhost ex2]$ gdb ruby GNU gdb 4.18 Copyright 1998 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 "i586-mandrake-linux"... (gdb) set li 32 (gdb) b dln_load Breakpoint 1 at 0x80b3ede: file dln.c, line 1258. (gdb) r -rShare -e 'p 1' Starting program: /usr/local/bin/ruby -rShare -e 'p 1' warning: Unable to find dynamic linker breakpoint function. GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code. Breakpoint 1, dln_load (file=0x8103e48 "./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 Function "Init_Share" not defined. (gdb) ------------------- I do not know why it does not find it. Thanks again. Ram Kochhar ----- Original Message ----- From: "ts" To: "ruby-talk ML" Cc: Sent: Friday, May 18, 2001 1:54 AM 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 > >