#53
001_log.md

第1回ログ

日時

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 のビルド

まず、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個できた!そしてコミットされた!!(= 成果が出た)

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」とか。

Imports/Qwik/000_Log.md
Imports/Qwik/002_log.md

Comments0