From: URABE Shyouhei Date: 2006-05-12T00:57:52+09:00 Subject: [ruby-dev:28632] set_trace_func dumps core (2) 以下のようにするとcoreを吐きます。 % cat segv.rb class Binding def eval str, *a Kernel.eval str, self, *a end end class Foo def m1 callcc do |*| x = lambda do |e, f, l, m, b, c| set_trace_func nil yield b end y = lambda do |e, *| set_trace_func x if e == "return" end set_trace_func y return end end def m2 m1 do |b| p [self, b.eval("self"), eval("self", b)] end end end eval "Foo.new.m2.foo" % gdb --args ruby-1.8 -v segv.rb GNU gdb 6.1-20040303 (Apple version gdb-413) (Wed May 18 10:17:02 GMT 2005) Copyright 2004 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 "powerpc-apple-darwin"...Reading symbols for shared libraries ..... done (gdb) run Starting program: /usr/local/bin/ruby-1.8 -v segv.rb Reading symbols for shared libraries ..+. done ruby 1.8.4 (2006-05-11) [powerpc-darwin8.6.0] [#, #, #] Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00000000 0x00000000 in ?? () (gdb) bt #0 0x00000000 in ?? () Cannot access memory at address 0x0 Cannot access memory at address 0x0 Cannot access memory at address 0x0 #1 0x002254e8 in rb_call0 (klass=Cannot access memory at address 0x0 154520, recv=154160, id=10065, oid=Cannot access memory at address 0x0 Cannot access memory at address 0x0 10065, argc=0, argv=0x0, body=0x25d28, flags=0) at ../ruby-1.8/eval.c:5920 #2 0x00225838 in rb_call (klass=154520, recv=154160, mid=10065, argc=0, argv=0x0, scope=0) at ../ruby-1.8/eval.c:6001 #3 0x00222984 in rb_eval (self=219620, n=0x25d28) at ../ruby-1.8/eval.c:3430 #4 0x002227b4 in rb_eval (self=219620, n=0x25d28) at ../ruby-1.8/eval.c:3424 #5 0x002315ec in eval (self=219620, src=154400, scope=4, file=0x2a031c "(eval)", line=1) at ../ruby-1.8/eval.c:6395 #6 0x00231a5c in rb_f_eval (argc=2824376, argv=0x25d28, self=2822604) at ../ruby-1.8/eval.c:6507 #7 0x00224e00 in rb_call0 (klass=224400, recv=219620, id=3913, oid=3913, argc=1, argv=0xbfffe000, body=0x35264, flags=2) at ../ruby-1.8/eval.c:5771 #8 0x00225838 in rb_call (klass=224400, recv=219620, mid=3913, argc=1, argv=0xbfffe000, scope=1) at ../ruby-1.8/eval.c:6001 #9 0x00222bbc in rb_eval (self=0, n=0x25d28) at ../ruby-1.8/eval.c:3445 #10 0x00232d50 in ruby_exec_internal () at ../ruby-1.8/eval.c:1590 #11 0x00232d9c in ruby_exec () at ../ruby-1.8/eval.c:1610 #12 0x00232de4 in ruby_run () at ../ruby-1.8/eval.c:1620 #13 0x00002ce8 in main (argc=3, argv=0xbfffec24, envp=0x25a30) at ../ruby-1.8/main.c:46 (gdb)