久しぶりにpoor man's rubyのデバッグ
ここ1週間全然プログラムが出来なかったけど、ようやく時間が取れたのでpoor man's rubyのデバッグをやってみました。
make testでコアを吐いてしまう件について追ってみました。プログラムは次のようなものです。
x = Proc.new { binding }.call eval("i4 = 1", x) p eval("i4", x)
もちろん、普通のrubyでは動きます。
追ってみると、vm.cのvm_make_env_each関数中の
if (!RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) { /* TODO */ env->block.iseq = 0; }
というチェックが引っかかっている模様です。そのため、その後でiseqを参照してコアを吐いてしまうようです。
何でチェックに引っかかるのかは、追ってるとyarvの深みにはまってしまいそうなので、一時中断することにします。