history

青木日記 RSS

<前の日 | この月 | 次の日>

2005-12-20

流行に便乗

るびまの次回予告を書こうとして

  • あなたの Ruby コードを添削し

なんか退屈だったので

  • ちゃうんだからっ! べ、別にあんたのためなんかじゃないんだからねっ 【第 3 回】 dbf.rb

とつなげたところで正気に戻って修正しといた。

(06:41)

YARV バグを追う

うーむ。-O2 のときだけ起こるってやだなあ。

(gdb) bt
#0  0x0000002a95b6fdd0 in raise () from /lib/libc.so.6
#1  0x0000002a95b71280 in abort () from /lib/libc.so.6
#2  0x000000000041dc87 in gc_mark_children (ptr=6732336, lev=2) at gc.c:1017
#3  0x000000000041d87b in gc_mark_children (ptr=6732608, lev=1) at gc.c:929
#4  0x000000000047ca4c in iseq_mark (ptr=0x71f380) at yarvcore.c:401
#5  0x000000000041d9c1 in gc_mark_children (ptr=182902853632, lev=2)
    at gc.c:968
#6  0x000000000041d95e in gc_mark_children (ptr=9, lev=1) at gc.c:949
#7  0x000000000047ca6a in iseq_mark (ptr=0x71ddb0) at yarvcore.c:401
#8  0x000000000041d9c1 in gc_mark_children (ptr=182902853952, lev=8)
    at gc.c:968
#9  0x000000000041d61e in mark_entry (key=24148, value=24148, lev=24148)
    at gc.c:688
#10 0x0000000000465eb0 in st_foreach (table=0x6116d0,
    func=0x41d610 <mark_entry>, arg=7) at st.c:468
#11 0x000000000041d89e in gc_mark_children (ptr=182904035944, lev=7)
    at gc.c:934
#12 0x000000000041d61e in mark_entry (key=24148, value=24148, lev=24148)
    at gc.c:688
#13 0x0000000000465eb0 in st_foreach (table=0x611e00,
    func=0x41d610 <mark_entry>, arg=6) at st.c:468
#14 0x000000000041d8aa in gc_mark_children (ptr=182904035824, lev=6)
    at gc.c:935
#15 0x000000000041d87b in gc_mark_children (ptr=182904035904, lev=5)
    at gc.c:929

まあこれくらい見とけばいいだろ。

frame 2。ptr が壊れてる。

frame 3。T_REGEXP と出たが中身は壊れてる。 だいたい iseq に正規表現が入っているというのがよくわからない。

frame 4。これは本当に iseq なのだろうか。

(gdb) p *$15
$16 = {self = 182902853632, name = 182902853672, iseq = 0x71ff50,
  iseq_encoded = 0x71ff50, iseq_mark_ary = 182902853592, size = 34,
  insn_info_tbl = 0x720070, insn_info_size = 10, file_name = 182902888232,
  local_tbl = 0x71aa90, local_size = 2, jit_compiled = 0x0, iseq_orig = 0x0,
  argc = 2, arg_simple = 1, arg_rest = 0, arg_block = 0, arg_opts = 0,
  arg_opt_tbl = 0x0, rewind_frame_size = 3, stack_max = 10, type = 7,
  klass_nest_stack = 6732608, klass = 0, catch_table_ary = 0,
  catch_table = 0x7200a0, catch_table_size = 2, parent_iseq = 0x71ddb0,
  local_iseq = 0x71ddb0, node = 0x2a95e06c18, special_block_builder = 0x0,
  cached_special_block_builder = 0x0, cached_special_block = 0,
  compile_data = 0x0}

うーん。これは本物のような気がする。うーん。

(gdb) p *(struct RString*)$15->name
$20 = {basic = {flags = 39, klass = 182904016944}, len = 22,
  ptr = 0x71aa70 "block in install_files", aux = {capa = 22, shared = 22}}
(gdb) p *(struct RString*)$15->file_name
$21 = {basic = {flags = 39, klass = 182904016944}, len = 31,
  ptr = 0x67cbb0 "/home/aamine/c/yarv/lib/mkmf.rb", aux = {capa = 31,
    shared = 31}}

やっぱり本物っぽいなあ……。

あ、T_REGEXP があった。

(gdb) rp $15->klass_nest_stack
T_REGEXP
$22 = {basic = {flags = 182903892776, klass = 6732336}, ptr = 0x2a95ee2010,
  len = 131072, str = 0x2a95fe1890 ""}

なぜこんなところに正規表現が。

つづく

(09:08)

YARV のバグを追う (2)

longjmp で変数が壊れてる、で解決か? と一瞬思ったが全然関係なかった。くそう。

VALUE が malloc() した何らかの値にすりかわっているらしいことはわかった。 ような気がする。単に壊れてるだけのような気もする。

あーもう! どこで壊れてんだよこれ! わからん! 寝る!

(01:28)

本日のツッコミ(全1件) [ツッコミを入れる]
すぎむし (2005-12-21 21:40)

中味のスタイルを合わせて、正気のままで、ぜひ。 > べ、別に

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS