msumimz's diary

RubyにJITコンパイラを実装する個人プロジェクトの情報発信ブログです。

デバッガにブレークするメソッドを定義する

MRIのコードを読む準備として、デバッガにブレークするメソッドをObjectクラスに定義します。
minirubyだけでは外部ライブラリを構築できませんので、object.cに直接書いてしまいます。
まず、以下のコードをobject.cのInit_Object()の前に追加します。

static VALUE
debugbreak(int argc, VALUE *argv, VALUE obj)
{
  __asm { int 3 }
  return Qnil;
}

次に、Init_Object()関数の最後に以下の行を追加します。

rb_define_method(rb_cObject, "debugbreak", debugbreak, 0);

minirubyを再ビルドします。
これで、Object#debugbreakというメソッドが定義されます。
以下のRubyスクリプトをデバッガ内で実行すれば、1行目でデバッガにブレークできます。

debugbreak
puts "hello world"

インタープリタの状態を調べたいところでこのメソッドを挿入すればよいわけです。