ブレークポイント

今回は、ブレークポイント
デバッガ上でこのソースのXX行目でプロセスを停止させたいと事前にブレークポイントを設定しておき
デバッガからプロセスを実行すると、そこでプロセスを中断して覗き見をしたり、関数の呼び出し履歴を表示できたりする。


この機能をMonaで実現するには?と考えた時に最初に浮かんだのは
デバッグビルド・システムコールである。(あほな命名だ・・)


どういう方法かというと。
まずMona側でプロセス停止のシステムコール(syscall_pause())を用意する。
んでもって、ブレークポイント設定後、プロセス実行の前に対象のソース(またはソースのコピー)の止めたい箇所でsyscall_pauseを呼び出すようなコードを
埋め込み後リビルドしてしまう。


こいつを実行すると当然該当箇所でシステムコールが呼ばれてプロセスが停止する。
もっと具体的にいうとスケジューラの実行キューから該当のプロセスがはずされるのである。


覗き見したあと、プロセスの一時停止状態を解除するシステムコールカーネルが用意してあげれば
再開も可能である。


ただこの方法には以下のデメリットがあることがすぐ分かると思う。

  1. デバッグのたびにリビルドが必要。
  2. ソースがないアプリケーションはデバッグできない。


そこでもう1つの方法が思い浮かんだ。
いや正確に言うとid:yaneuraoさんの本の中でそれに関するヒント(ほぼ答え)があったのだ。


その方法とは (つづく)