10周年のSPコンテンツ!
16
Ryosuke Matsumoto / まつもとりー @matsumotory
さてmod_mrubyに復帰しようと思って早速コンパイルしてみたら、mrb_code *pc = irep->iseq;でmod_mrubyがsegfaultおこすようになってるな。
Ryosuke Matsumoto / まつもとりー @matsumotory
mod_mrubyここでこけるなぁ。 mrb_run (mrb=0xb57f8148, proc=0xb57fb01c, self=...) at vm.c:446 446 mrb_code *pc = irep->iseq;
Yukihiro Matsumoto @yukihiro_matz
@matsumotory ここでirepの値はどうなってますか? あるいはirep->iseqの値は?
Ryosuke Matsumoto / まつもとりー @matsumotory
@yukihiro_matz procが{tt = MRB_TT_PROC, color = 2, flags = 0, c = 0xb57fe6c4, gcnext = 0x0, body = {irep = 0x0, func = 0}, でirepはNULLになっています。
Yukihiro Matsumoto @yukihiro_matz
@matsumotory irepが0なのはaliasかな。バックとレースはどうなってます? トップレベルのmrb_runですか? それともmrb_funcall_* 経由で呼ばれてますか? その場合のmidは?
Ryosuke Matsumoto / まつもとりー @matsumotory
@yukihiro_matz mrb_runですね。#0 mrb_run (mrb=0xb57f8148, proc=0xb57fb01c, self=...) at vm.c:446
Yukihiro Matsumoto @yukihiro_matz
@matsumotory ということは、トップレベルのmrb_runの先頭でいきなり落ちていると思ってよいでしょうか。ということは、最初のmrb_runの呼び出しでのprocの指定が間違っているようですね。バックトレース見れますか?
Ryosuke Matsumoto / まつもとりー @matsumotory
@yukihiro_matz 実装的にも先頭でいきなり落ちていると思われます。segfault後のバックトレースは https://t.co/tfb803Q6 
Yukihiro Matsumoto @yukihiro_matz
@matsumotory mod_mruby.c:995でのnの値が知りたいです。mrb_generate_code()の仕様が変わってたかも。
Ryosuke Matsumoto / まつもとりー @matsumotory
@yukihiro_matz nは148です。 995 mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value()); (gdb) p n $1 = 148
Yukihiro Matsumoto @yukihiro_matz
@matsumotory mod_ruby.c:911のmrb_generate_code()の第2引数をp->treeからpに変更してみてください。引数の型が変わってます。
Yukihiro Matsumoto @yukihiro_matz
@matsumotory あと、mrb_runの第3引数はmrb_top_self(mrb)の方が良いと思います。
Ryosuke Matsumoto / まつもとりー @matsumotory
@yukihiro_matz おお!いけました!ありがとうございます。
Yukihiro Matsumoto @yukihiro_matz
@matsumotory よかったー。Twitterデバッグ成功。

コメント

コメントがまだありません。感想を最初に伝えてみませんか?

ログインして広告を非表示にする
ログインして広告を非表示にする