岩岡です。 In message <199812110632.PAA14588 / picachu.netlab.co.jp> matz / netlab.co.jp (Yukihiro Matsumoto) writes: > というエラーを見るとあるはずのファイル名がありません.という > ことはf_require()に渡ったはずの socket という文字列が消えて > なくなっているのでしょう. gdb でちょっと追ってみました。 Breakpoint 2, load (file=0xef600 "/usr/local/lib/ruby/i386-bsdi3.1/socket.o") at dln.c:1038 1038 if (dln_init_p == 0) { (gdb) print file $4 = 0xef600 "/usr/local/lib/ruby/i386-bsdi3.1/socket.o" (gdb) step 1039 if (dln_init(dln_argv0) == -1) return -1; (gdb) next 1041 result = strlen(file); (gdb) print file $5 = 0xef600 "" というように、load() が呼ばれた時点では file に正しいパス名が入っ ているにもかかわらず、dln_init(dln_argv0) が呼ばれると空になってし まうようです。 1039行目から step で追ってみると、どうやらガベコレが呼ばれているよ うなので、もしかしてコレクションされちゃってる? > gdbとかでf_require()の動きをトレースすれば一発で分かると思う > のですが….スクリプトの長さで変化するという現象を見るとメモ > リ関係だと思うのですが.alloca()がちゃんと動いてないのかなあ. これを読んで、昔データが大きい時にうまく動かなくて GNU malloc lib をリンクしてたのを思い出したのですが、今回は解決策になりませんでし た;.; 中途半端ですが、とりあえずこのあたりで。 いわおか@実はちょっと訳あって自分の環境はFreeBSDに移行中