2021-03-30 [長年日記]
_ ruby-coreコードでpデバッグ
調べても意外とわからず、笹田さんに教えてもらったのでメモ。 printfだとflushのやり方がよくわからなかったので以下を使うと良い。
rb_p
- Rubyのp メソッドをつかう方法
- rb_pにRubyのStringオブジェクト相当を渡す
- rb_fstring_newはfrozenなStringオブジェクトをつくるメソッド
- work/rb_mjit_header.hにサンプルになるコードが書いてあったので真似た
rb_p(rb_fstring_new("===foo", (sizeof("===foo") - 1)));
fprintf
- 笹田さんに
fprintf(stderr, "===foo\n");
を教えてもらった - flush不要なので便利
fprintf(stdout, "===foo\n");
も動いた- 前に書いたときにSEGVしたのだけど、あらためて動かしてみたらちゃんと動いた
- stdoutをちゃんと取れてなかったのかなー?
fprintf(stderr, "===foo\n");
fprintf(stdout, "===foo\n");