2008年7月11日(Fri.) 19:30~
RUMOR CAFE&BAR
http://r.gnavi.co.jp/p908400
ちなみに、持ちこんだ大学いもは浅草名物のこちら。
大学いも 千葉屋
http://www.asa3.net/tenposyokai/9/chibaya/chibaya.htm
10名。超豪華メンバー。
自己紹介で「住んでる場所」を言うようにしてみたところ、みんなほんとに近所。
最寄り駅じゃなくて通りの名前でわかるぐらいww
最大派閥は墨田区。
まず、Ruby 1.9の trunk版をどこのディレクトリにインストールするかで以下の2つの派閥に分かれた。
ささだ先生。「そういうもんでしょ」
かくたにさんほか。「/tmpに入れたら再起動したら消えちゃうじゃん」
以下、OSX Leopardで ~/ruby/ にインストールするものとして進める。
% mkdir ~/ruby
% cd ~/ruby
% svn co http://svn.ruby-lang.org/repos/ruby/trunk
% autoconf
% ./configure --prefix=/Users/matsuda/ruby --program-suffix=19
% make
% make test
% make install
% vi ~/.zshenv
~/ruby/bin: を追加。
% ruby19 -v
% cd
% git clone git://github.com/rails/rails.git
% cd rails
% rake19 test
no such file to load -- rake/contrib/sshpublisher
というエラーが発生する。
% gem19 install rake
% ~/ruby/bin/rake test
sshpublisherのエラーは発生しなくなった。 が、actionpackのテストで
TypeError: wrong argument type Proc (expected Binding)
というエラーが大量に発生。
1728 tests, 8765 assertions, 4 failures, 58 errors
ささださんより、1.9からは Procを暗黙的に Bindingに変換しないように変更したから、明示的に Proc#binding を呼ばなきゃダメだよ、 との指摘が入る。
~/rails/actionpack/lib/action_view/helpers/tag_helper.rb を以下のように書き換えてみる。
118c118
< block && eval(BLOCK_CALLED_FROM_ERB, block)
---
> block && eval(BLOCK_CALLED_FROM_ERB, block.binding)
で、再実行。 おおおー。直った!パッチが1個できた!そしてコミットされた!!(= 成果が出た)
1728 tests, 8815 assertions, 1 failures, 15 errors
でもなんか終了時に落ちるようになった(後述)。 さらに、以下のように、mochaが必要、と何度も警告が出る。
Skipping should_cache_ok_at_custom_path tests. `gem install mocha` and try again.
% gem19 install mocha
再実行。 エラー激減!!!
2007 tests, 9400 assertions, 2 failures, 0 errors
エラー出力は以下のとおり。なお、このエラーが発生する actionpackのテストのみを実行するには、actionpackのディレクトリに cdしてから testを実行すれば良い。
-- control frame ----------
c:0006 p:0035 s:0016 b:0015 l:000014 d:000014 METHOD /Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:159
c:0005 p:0087 s:0010 b:0010 l:000009 d:000009 METHOD /Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:112
c:0004 p:0026 s:0006 b:0006 l:002318 d:000005 BLOCK /Users/matsuda/ruby/lib/ruby/1.9.0/cgi/session.rb:166
c:0003 p:---- s:0006 b:0006 l:000005 d:000005 FINISH :set_encoding
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 CFUNC :call
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP <dummy toplevel>:33656
---------------------------
DBG> : "/Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:159:in `write_cookie'"
DBG> : "/Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:112:in `close'"
DBG> : "/Users/matsuda/ruby/lib/ruby/1.9.0/cgi/session.rb:166:in `block in callback'"
DBG> : ":0:in `call'"
-- backtrace of native function call (Use addr2line) --
0xfca66
0x2520c
0x2524b
0xafa31
0x94e5909b
0xffffffff
0xe81e6
0xe8256
0xe8351
0xf3d08
0xf4acb
0xf502b
0x2d24e
0xe7ef5
0xf607d
0xebe1d
0xf5b3a
0x36cb1
0x286a2
0x37d53
0x37f82
0x2aa88
0x2ac16
0x260f
0x2576
-------------------------------------------------------
MacOSX Leopard上で上記操作を行い、コアファイルをgdbに読み込んでバックトレースを出力させてみました。
% gdb -c /cores/core.18474
GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct 2 04:07:49 UTC 2007)
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 "i386-apple-darwin".
Core was generated by `/usr/local/bin/ruby1.9'.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ................................. done
#0 0x90390b9e in kill$UNIX2003 ()
(gdb) bt
#0 0x90390b9e in kill$UNIX2003 ()
#1 0x90407ec2 in raise ()
#2 0x9041747f in abort ()
#3 0x001e27c0 in rb_bug (fmt=0x2ce543 "Segmentation fault") at ../ruby-trunk/error.c:226
#4 0x0026d131 in sigsegv (sig=11) at ../ruby-trunk/signal.c:563
#5 0x9038f09b in _sigtramp ()
#6 0xffffffff in ?? ()
#7 0x002a6f56 in search_method (klass=3221210852, id=159, klassp=0x0) at vm_method.c:227
#8 0x002a6fc6 in rb_get_method_body (klass=41617380, id=62536, idp=0x0) at vm_method.c:254
#9 0x002a70c1 in rb_method_node (klass=41617380, id=62536) at vm_method.c:298
#10 0x002b2a78 in vm_eval (th=0x400680, initial=<value temporarily unavailable, due to optimizations>) at vm_insnhelper.c:1116
#11 0x002b383b in vm_eval_body (th=0x400680) at ../ruby-trunk/vm.c:1058
#12 0x002b3d9b in vm_invoke_proc (th=0x400680, proc=0x262e320, self=23079240, argc=1, argv=0x387c780, blockptr=0x0) at ../ruby-trunk/vm.c:472
#13 0x001ea7be in proc_call (argc=0, argv=0x0, procval=0) at ../ruby-trunk/proc.c:515
#14 0x002a6c65 in call_cfunc (func=0x1ea760 <proc_call>, recv=41606920, len=<value temporarily unavailable, due to optimizations>, argc=1, argv=0x387c780) at vm_insnhelper.c:288
#15 0x002b4ded in vm_call0 (th=0x400680, klass=722260, recv=41606920, id=7696, oid=0, argc=1, argv=0x387c780, body=0xb04f0, nosuper=0) at vm_eval.c:75
#16 0x002aab8d in rb_funcall2 (recv=41606920, mid=7696, argc=1, argv=0x387c780) at vm_eval.c:251
#17 0x002b48aa in rb_eval_cmd (cmd=41606920, arg=60874240, level=0) at vm_eval.c:874
#18 0x001f4221 in run_single_final (arg=2419657630) at ../ruby-trunk/gc.c:1999
#19 0x001e5c12 in rb_protect (proc=0x1f4200 <run_single_final>, data=3221214776, state=0xbfffd648) at ../ruby-trunk/eval.c:698
#20 0x001f52c3 in finalize_list (objspace=0x2fb040, p=0x27ae548) at ../ruby-trunk/gc.c:2022
#21 0x001f54f2 in rb_gc_call_finalizer_at_exit () at ../ruby-trunk/gc.c:2070
#22 0x001e7ff8 in ruby_cleanup (ex=0) at ../ruby-trunk/eval.c:168
#23 0x001e8186 in ruby_run_node (n=0x9c428) at ../ruby-trunk/eval.c:245
#24 0x00001fef in main (argc=76, argv=0x802400, envp=0xbfffd8f0) at ../ruby-trunk/main.c:34
Debian etch (i486-linux)でも同じ結果なので、addr2lineの結果を貼っときます。
入力
0x8101fe5
0x812936e
0x81293cb
0x80cabb3
0xb7f2c440
0x80f1a74
0x80f1ac3
0x80f1bbf
0x80faf55
0x80fbd4b
0x80fc394
0x80fc704
0x805ccd4
0x80f2e7e
0x80fdc10
0x80f48b6
0x80fd669
0x805fea1
0x8059e20
0x80604f1
0x8060665
0x805ba81
0x805bc06
0x8058c91
0xb7d8dea8
0x8058ba1
結果
rb_vm_bugreport
../ruby_trunk/vm_dump.c:595
report_bug
../ruby_trunk/error.c:213
rb_bug
../ruby_trunk/error.c:226
sigsegv
../ruby_trunk/signal.c:563
??
??:0
search_method
../ruby_trunk/vm_method.c:227
rb_get_method_body
../ruby_trunk/vm_method.c:254
rb_method_node
../ruby_trunk/vm_method.c:299
vm_method_search
../ruby_trunk/vm_insnhelper.c:1117
vm_eval_body
../ruby_trunk/vm.c:1059
invoke_block_from_c
../ruby_trunk/vm.c:477
vm_invoke_proc
../ruby_trunk/vm.c:517
proc_call
../ruby_trunk/proc.c:517
call_cfunc
../ruby_trunk/vm_insnhelper.c:288
vm_call0
../ruby_trunk/vm_eval.c:77
rb_funcall2
../ruby_trunk/vm_eval.c:404
rb_eval_cmd
../ruby_trunk/vm_eval.c:877
run_single_final
../ruby_trunk/gc.c:2001
rb_protect
../ruby_trunk/eval.c:698
run_final
../ruby_trunk/gc.c:2018
rb_gc_call_finalizer_at_exit
../ruby_trunk/gc.c:2071
ruby_cleanup
../ruby_trunk/eval.c:169
ruby_run_node
../ruby_trunk/eval.c:246
main
../ruby_trunk/main.c:36
??
??:0
_start
../sysdeps/i386/elf/start.S:122
(未完)
Test::Unit::AutoRunnerにオプションを渡すには「TESTOPTS=-v」とか。
## 第1回ログ ## 日時 2008年7月11日(Fri.) 19:30~ ## 場所 RUMOR CAFE&BAR [http://r.gnavi.co.jp/p908400](http://r.gnavi.co.jp/p908400) ちなみに、持ちこんだ大学いもは浅草名物のこちら。 大学いも 千葉屋 [http://www.asa3.net/tenposyokai/9/chibaya/chibaya.htm](http://www.asa3.net/tenposyokai/9/chibaya/chibaya.htm) ## 参加者 10名。超豪華メンバー。 ## やったこと ### 自己紹介 自己紹介で「住んでる場所」を言うようにしてみたところ、みんなほんとに近所。 最寄り駅じゃなくて通りの名前でわかるぐらいww 最大派閥は墨田区。 ### Ruby 1.9 trunk のビルド まず、Ruby 1.9の trunk版をどこのディレクトリにインストールするかで以下の2つの派閥に分かれた。 #### /tmp派 ささだ先生。「そういうもんでしょ」 #### ~派 かくたにさんほか。「/tmpに入れたら再起動したら消えちゃうじゃん」 ### trunk取得、ビルド 以下、OSX Leopardで ~/ruby/ にインストールするものとして進める。 #### インストール先ディレクトリ作成 % mkdir ~/ruby % cd ~/ruby #### チェックアウト % svn co http://svn.ruby-lang.org/repos/ruby/trunk #### configure % autoconf % ./configure --prefix=/Users/matsuda/ruby --program-suffix=19 #### make % make % make test % make install #### pathの設定 % vi ~/.zshenv ~/ruby/bin: を追加。 #### 実行してみる % ruby19 -v ### Rails edge の取得、テスト実行 #### Rails edgeを ~/rails/ に展開してみる % cd % git clone git://github.com/rails/rails.git % cd rails #### rake testの実行 % rake19 test no such file to load -- rake/contrib/sshpublisher というエラーが発生する。 #### gemで入れた rakeから実行 % gem19 install rake % ~/ruby/bin/rake test sshpublisherのエラーは発生しなくなった。 が、actionpackのテストで TypeError: wrong argument type Proc (expected Binding) というエラーが大量に発生。 1728 tests, 8765 assertions, 4 failures, 58 errors #### binding ささださんより、1.9からは Procを暗黙的に Bindingに変換しないように変更したから、明示的に Proc#binding を呼ばなきゃダメだよ、 との指摘が入る。 ~/rails/actionpack/lib/action\_view/helpers/tag\_helper.rb を以下のように書き換えてみる。 118c118 < block && eval(BLOCK_CALLED_FROM_ERB, block) --- > block && eval(BLOCK_CALLED_FROM_ERB, block.binding) で、再実行。 おおおー。直った!パッチが1個できた!そして[コミットされた](http://github.com/rails/rails/commit/bb33432b0f5bf644713e696e4dafc7e7d3cc5808)!!(= 成果が出た) 1728 tests, 8815 assertions, 1 failures, 15 errors でもなんか終了時に落ちるようになった(後述)。 さらに、以下のように、mochaが必要、と何度も警告が出る。 Skipping should_cache_ok_at_custom_path tests. `gem install mocha` and try again. #### ので、mochaをインストール。 % gem19 install mocha 再実行。 エラー激減!!! 2007 tests, 9400 assertions, 2 failures, 0 errors #### でもやっぱり終了時に落ちる エラー出力は以下のとおり。なお、このエラーが発生する actionpackのテストのみを実行するには、actionpackのディレクトリに cdしてから testを実行すれば良い。 -- control frame ---------- c:0006 p:0035 s:0016 b:0015 l:000014 d:000014 METHOD /Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:159 c:0005 p:0087 s:0010 b:0010 l:000009 d:000009 METHOD /Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:112 c:0004 p:0026 s:0006 b:0006 l:002318 d:000005 BLOCK /Users/matsuda/ruby/lib/ruby/1.9.0/cgi/session.rb:166 c:0003 p:---- s:0006 b:0006 l:000005 d:000005 FINISH :set_encoding c:0002 p:---- s:0004 b:0004 l:000003 d:000003 CFUNC :call c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP <dummy toplevel>:33656 --------------------------- DBG> : "/Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:159:in `write_cookie'" DBG> : "/Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:112:in `close'" DBG> : "/Users/matsuda/ruby/lib/ruby/1.9.0/cgi/session.rb:166:in `block in callback'" DBG> : ":0:in `call'" -- backtrace of native function call (Use addr2line) -- 0xfca66 0x2520c 0x2524b 0xafa31 0x94e5909b 0xffffffff 0xe81e6 0xe8256 0xe8351 0xf3d08 0xf4acb 0xf502b 0x2d24e 0xe7ef5 0xf607d 0xebe1d 0xf5b3a 0x36cb1 0x286a2 0x37d53 0x37f82 0x2aa88 0x2ac16 0x260f 0x2576 ------------------------------------------------------- #### SEGVで出来たコアファイルを調査 MacOSX Leopard上で上記操作を行い、コアファイルをgdbに読み込んでバックトレースを出力させてみました。 % gdb -c /cores/core.18474 GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct 2 04:07:49 UTC 2007) 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 "i386-apple-darwin". Core was generated by `/usr/local/bin/ruby1.9'. Reading symbols for shared libraries . done Reading symbols for shared libraries ................................. done #0 0x90390b9e in kill$UNIX2003 () (gdb) bt #0 0x90390b9e in kill$UNIX2003 () #1 0x90407ec2 in raise () #2 0x9041747f in abort () #3 0x001e27c0 in rb_bug (fmt=0x2ce543 "Segmentation fault") at ../ruby-trunk/error.c:226 #4 0x0026d131 in sigsegv (sig=11) at ../ruby-trunk/signal.c:563 #5 0x9038f09b in _sigtramp () #6 0xffffffff in ?? () #7 0x002a6f56 in search_method (klass=3221210852, id=159, klassp=0x0) at vm_method.c:227 #8 0x002a6fc6 in rb_get_method_body (klass=41617380, id=62536, idp=0x0) at vm_method.c:254 #9 0x002a70c1 in rb_method_node (klass=41617380, id=62536) at vm_method.c:298 #10 0x002b2a78 in vm_eval (th=0x400680, initial=<value temporarily unavailable, due to optimizations>) at vm_insnhelper.c:1116 #11 0x002b383b in vm_eval_body (th=0x400680) at ../ruby-trunk/vm.c:1058 #12 0x002b3d9b in vm_invoke_proc (th=0x400680, proc=0x262e320, self=23079240, argc=1, argv=0x387c780, blockptr=0x0) at ../ruby-trunk/vm.c:472 #13 0x001ea7be in proc_call (argc=0, argv=0x0, procval=0) at ../ruby-trunk/proc.c:515 #14 0x002a6c65 in call_cfunc (func=0x1ea760 <proc_call>, recv=41606920, len=<value temporarily unavailable, due to optimizations>, argc=1, argv=0x387c780) at vm_insnhelper.c:288 #15 0x002b4ded in vm_call0 (th=0x400680, klass=722260, recv=41606920, id=7696, oid=0, argc=1, argv=0x387c780, body=0xb04f0, nosuper=0) at vm_eval.c:75 #16 0x002aab8d in rb_funcall2 (recv=41606920, mid=7696, argc=1, argv=0x387c780) at vm_eval.c:251 #17 0x002b48aa in rb_eval_cmd (cmd=41606920, arg=60874240, level=0) at vm_eval.c:874 #18 0x001f4221 in run_single_final (arg=2419657630) at ../ruby-trunk/gc.c:1999 #19 0x001e5c12 in rb_protect (proc=0x1f4200 <run_single_final>, data=3221214776, state=0xbfffd648) at ../ruby-trunk/eval.c:698 #20 0x001f52c3 in finalize_list (objspace=0x2fb040, p=0x27ae548) at ../ruby-trunk/gc.c:2022 #21 0x001f54f2 in rb_gc_call_finalizer_at_exit () at ../ruby-trunk/gc.c:2070 #22 0x001e7ff8 in ruby_cleanup (ex=0) at ../ruby-trunk/eval.c:168 #23 0x001e8186 in ruby_run_node (n=0x9c428) at ../ruby-trunk/eval.c:245 #24 0x00001fef in main (argc=76, argv=0x802400, envp=0xbfffd8f0) at ../ruby-trunk/main.c:34 #### addr2lineの結果 Debian etch (i486-linux)でも同じ結果なので、addr2lineの結果を貼っときます。 入力 0x8101fe5 0x812936e 0x81293cb 0x80cabb3 0xb7f2c440 0x80f1a74 0x80f1ac3 0x80f1bbf 0x80faf55 0x80fbd4b 0x80fc394 0x80fc704 0x805ccd4 0x80f2e7e 0x80fdc10 0x80f48b6 0x80fd669 0x805fea1 0x8059e20 0x80604f1 0x8060665 0x805ba81 0x805bc06 0x8058c91 0xb7d8dea8 0x8058ba1 結果 rb_vm_bugreport ../ruby_trunk/vm_dump.c:595 report_bug ../ruby_trunk/error.c:213 rb_bug ../ruby_trunk/error.c:226 sigsegv ../ruby_trunk/signal.c:563 ?? ??:0 search_method ../ruby_trunk/vm_method.c:227 rb_get_method_body ../ruby_trunk/vm_method.c:254 rb_method_node ../ruby_trunk/vm_method.c:299 vm_method_search ../ruby_trunk/vm_insnhelper.c:1117 vm_eval_body ../ruby_trunk/vm.c:1059 invoke_block_from_c ../ruby_trunk/vm.c:477 vm_invoke_proc ../ruby_trunk/vm.c:517 proc_call ../ruby_trunk/proc.c:517 call_cfunc ../ruby_trunk/vm_insnhelper.c:288 vm_call0 ../ruby_trunk/vm_eval.c:77 rb_funcall2 ../ruby_trunk/vm_eval.c:404 rb_eval_cmd ../ruby_trunk/vm_eval.c:877 run_single_final ../ruby_trunk/gc.c:2001 rb_protect ../ruby_trunk/eval.c:698 run_final ../ruby_trunk/gc.c:2018 rb_gc_call_finalizer_at_exit ../ruby_trunk/gc.c:2071 ruby_cleanup ../ruby_trunk/eval.c:169 ruby_run_node ../ruby_trunk/eval.c:246 main ../ruby_trunk/main.c:36 ?? ??:0 _start ../sysdeps/i386/elf/start.S:122 (未完) ## 豆知識 Test::Unit::AutoRunnerにオプションを渡すには「TESTOPTS=-v」とか。
2008年7月11日(Fri.) 19:30~
RUMOR CAFE&BAR
http://r.gnavi.co.jp/p908400
ちなみに、持ちこんだ大学いもは浅草名物のこちら。
大学いも 千葉屋
http://www.asa3.net/tenposyokai/9/chibaya/chibaya.htm
10名。超豪華メンバー。
自己紹介で「住んでる場所」を言うようにしてみたところ、みんなほんとに近所。
最寄り駅じゃなくて通りの名前でわかるぐらいww
最大派閥は墨田区。
まず、Ruby 1.9の trunk版をどこのディレクトリにインストールするかで以下の2つの派閥に分かれた。
ささだ先生。「そういうもんでしょ」
かくたにさんほか。「/tmpに入れたら再起動したら消えちゃうじゃん」
以下、OSX Leopardで ~/ruby/ にインストールするものとして進める。
% mkdir ~/ruby
% cd ~/ruby
% svn co http://svn.ruby-lang.org/repos/ruby/trunk
% autoconf
% ./configure --prefix=/Users/matsuda/ruby --program-suffix=19
% make
% make test
% make install
% vi ~/.zshenv
~/ruby/bin: を追加。
% ruby19 -v
% cd
% git clone git://github.com/rails/rails.git
% cd rails
% rake19 test
no such file to load -- rake/contrib/sshpublisher
というエラーが発生する。
% gem19 install rake
% ~/ruby/bin/rake test
sshpublisherのエラーは発生しなくなった。 が、actionpackのテストで
TypeError: wrong argument type Proc (expected Binding)
というエラーが大量に発生。
1728 tests, 8765 assertions, 4 failures, 58 errors
ささださんより、1.9からは Procを暗黙的に Bindingに変換しないように変更したから、明示的に Proc#binding を呼ばなきゃダメだよ、 との指摘が入る。
~/rails/actionpack/lib/action_view/helpers/tag_helper.rb を以下のように書き換えてみる。
118c118
< block && eval(BLOCK_CALLED_FROM_ERB, block)
---
> block && eval(BLOCK_CALLED_FROM_ERB, block.binding)
で、再実行。 おおおー。直った!パッチが1個できた!そしてコミットされた!!(= 成果が出た)
1728 tests, 8815 assertions, 1 failures, 15 errors
でもなんか終了時に落ちるようになった(後述)。 さらに、以下のように、mochaが必要、と何度も警告が出る。
Skipping should_cache_ok_at_custom_path tests. `gem install mocha` and try again.
% gem19 install mocha
再実行。 エラー激減!!!
2007 tests, 9400 assertions, 2 failures, 0 errors
エラー出力は以下のとおり。なお、このエラーが発生する actionpackのテストのみを実行するには、actionpackのディレクトリに cdしてから testを実行すれば良い。
-- control frame ----------
c:0006 p:0035 s:0016 b:0015 l:000014 d:000014 METHOD /Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:159
c:0005 p:0087 s:0010 b:0010 l:000009 d:000009 METHOD /Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:112
c:0004 p:0026 s:0006 b:0006 l:002318 d:000005 BLOCK /Users/matsuda/ruby/lib/ruby/1.9.0/cgi/session.rb:166
c:0003 p:---- s:0006 b:0006 l:000005 d:000005 FINISH :set_encoding
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 CFUNC :call
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP <dummy toplevel>:33656
---------------------------
DBG> : "/Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:159:in `write_cookie'"
DBG> : "/Users/matsuda/rails/actionpack/lib/action_controller/session/cookie_store.rb:112:in `close'"
DBG> : "/Users/matsuda/ruby/lib/ruby/1.9.0/cgi/session.rb:166:in `block in callback'"
DBG> : ":0:in `call'"
-- backtrace of native function call (Use addr2line) --
0xfca66
0x2520c
0x2524b
0xafa31
0x94e5909b
0xffffffff
0xe81e6
0xe8256
0xe8351
0xf3d08
0xf4acb
0xf502b
0x2d24e
0xe7ef5
0xf607d
0xebe1d
0xf5b3a
0x36cb1
0x286a2
0x37d53
0x37f82
0x2aa88
0x2ac16
0x260f
0x2576
-------------------------------------------------------
MacOSX Leopard上で上記操作を行い、コアファイルをgdbに読み込んでバックトレースを出力させてみました。
% gdb -c /cores/core.18474
GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct 2 04:07:49 UTC 2007)
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 "i386-apple-darwin".
Core was generated by `/usr/local/bin/ruby1.9'.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ................................. done
#0 0x90390b9e in kill$UNIX2003 ()
(gdb) bt
#0 0x90390b9e in kill$UNIX2003 ()
#1 0x90407ec2 in raise ()
#2 0x9041747f in abort ()
#3 0x001e27c0 in rb_bug (fmt=0x2ce543 "Segmentation fault") at ../ruby-trunk/error.c:226
#4 0x0026d131 in sigsegv (sig=11) at ../ruby-trunk/signal.c:563
#5 0x9038f09b in _sigtramp ()
#6 0xffffffff in ?? ()
#7 0x002a6f56 in search_method (klass=3221210852, id=159, klassp=0x0) at vm_method.c:227
#8 0x002a6fc6 in rb_get_method_body (klass=41617380, id=62536, idp=0x0) at vm_method.c:254
#9 0x002a70c1 in rb_method_node (klass=41617380, id=62536) at vm_method.c:298
#10 0x002b2a78 in vm_eval (th=0x400680, initial=<value temporarily unavailable, due to optimizations>) at vm_insnhelper.c:1116
#11 0x002b383b in vm_eval_body (th=0x400680) at ../ruby-trunk/vm.c:1058
#12 0x002b3d9b in vm_invoke_proc (th=0x400680, proc=0x262e320, self=23079240, argc=1, argv=0x387c780, blockptr=0x0) at ../ruby-trunk/vm.c:472
#13 0x001ea7be in proc_call (argc=0, argv=0x0, procval=0) at ../ruby-trunk/proc.c:515
#14 0x002a6c65 in call_cfunc (func=0x1ea760 <proc_call>, recv=41606920, len=<value temporarily unavailable, due to optimizations>, argc=1, argv=0x387c780) at vm_insnhelper.c:288
#15 0x002b4ded in vm_call0 (th=0x400680, klass=722260, recv=41606920, id=7696, oid=0, argc=1, argv=0x387c780, body=0xb04f0, nosuper=0) at vm_eval.c:75
#16 0x002aab8d in rb_funcall2 (recv=41606920, mid=7696, argc=1, argv=0x387c780) at vm_eval.c:251
#17 0x002b48aa in rb_eval_cmd (cmd=41606920, arg=60874240, level=0) at vm_eval.c:874
#18 0x001f4221 in run_single_final (arg=2419657630) at ../ruby-trunk/gc.c:1999
#19 0x001e5c12 in rb_protect (proc=0x1f4200 <run_single_final>, data=3221214776, state=0xbfffd648) at ../ruby-trunk/eval.c:698
#20 0x001f52c3 in finalize_list (objspace=0x2fb040, p=0x27ae548) at ../ruby-trunk/gc.c:2022
#21 0x001f54f2 in rb_gc_call_finalizer_at_exit () at ../ruby-trunk/gc.c:2070
#22 0x001e7ff8 in ruby_cleanup (ex=0) at ../ruby-trunk/eval.c:168
#23 0x001e8186 in ruby_run_node (n=0x9c428) at ../ruby-trunk/eval.c:245
#24 0x00001fef in main (argc=76, argv=0x802400, envp=0xbfffd8f0) at ../ruby-trunk/main.c:34
Debian etch (i486-linux)でも同じ結果なので、addr2lineの結果を貼っときます。
入力
0x8101fe5
0x812936e
0x81293cb
0x80cabb3
0xb7f2c440
0x80f1a74
0x80f1ac3
0x80f1bbf
0x80faf55
0x80fbd4b
0x80fc394
0x80fc704
0x805ccd4
0x80f2e7e
0x80fdc10
0x80f48b6
0x80fd669
0x805fea1
0x8059e20
0x80604f1
0x8060665
0x805ba81
0x805bc06
0x8058c91
0xb7d8dea8
0x8058ba1
結果
rb_vm_bugreport
../ruby_trunk/vm_dump.c:595
report_bug
../ruby_trunk/error.c:213
rb_bug
../ruby_trunk/error.c:226
sigsegv
../ruby_trunk/signal.c:563
??
??:0
search_method
../ruby_trunk/vm_method.c:227
rb_get_method_body
../ruby_trunk/vm_method.c:254
rb_method_node
../ruby_trunk/vm_method.c:299
vm_method_search
../ruby_trunk/vm_insnhelper.c:1117
vm_eval_body
../ruby_trunk/vm.c:1059
invoke_block_from_c
../ruby_trunk/vm.c:477
vm_invoke_proc
../ruby_trunk/vm.c:517
proc_call
../ruby_trunk/proc.c:517
call_cfunc
../ruby_trunk/vm_insnhelper.c:288
vm_call0
../ruby_trunk/vm_eval.c:77
rb_funcall2
../ruby_trunk/vm_eval.c:404
rb_eval_cmd
../ruby_trunk/vm_eval.c:877
run_single_final
../ruby_trunk/gc.c:2001
rb_protect
../ruby_trunk/eval.c:698
run_final
../ruby_trunk/gc.c:2018
rb_gc_call_finalizer_at_exit
../ruby_trunk/gc.c:2071
ruby_cleanup
../ruby_trunk/eval.c:169
ruby_run_node
../ruby_trunk/eval.c:246
main
../ruby_trunk/main.c:36
??
??:0
_start
../sysdeps/i386/elf/start.S:122
(未完)
Test::Unit::AutoRunnerにオプションを渡すには「TESTOPTS=-v」とか。