On Sun, 1 Aug 1999 21:37:31 +0900,
"NAKAMURA, Hiroshi"  wrote:

> > > >     + UNIX domain socketに対する双方向入出力をするプログラム
> > > >       をdebugcomm.rbとすると、kterm -e ruby debugcomm.rb <path>&
> > > >       で入出力用ウィンドウを開く。

> なるほどこういう手を使うのですね...この場合sdebug.rbが,
> まつもとさんの「debugcomm.rb」になるのかな?
> デバッギのラッパが実質のデバッグ処理をこなし,
> そいつへの入出力はリモートデバッガが行う,と.

実は
kterm -e ruby debugcomm.rb <path>&
の意味がよくわからなかったのでこうやってるのです。

Thread使ってるほうの短いスクリプト(debugger-srv.rb)は
socket開いてacceptで待ってるので、クライアントより
先に動いてないとまずいので、あらかじめべつのrxvtで動かしておく。
その後、debugするプログラムを動かすrxvtで
ruby -rsdebug cur.rb
とやって動かすわけです。

> > この程度で一応使えてますが、C-cでdebugプロンプトに戻るのは
> > どうやればいいんでしょうか。debug用サーバではtrapでつかまえる
> > として、どうやってdebuggerに送るのかわかりませぬ。
> 
> リモートデバッガからデバッギにsignalを飛ばさないといけないですが,
> 間にsocketが入ってしまうと相手のプロセスIDがわからない...ので,
> 簡単な方法ではできないと思います.

たしかに。
 
> うーん,間にもう1層噛ましてみるとか.
> デバッギラッパでまずプロセスをforkして,子プロセスでデバッギを動作させ,
> 親プロセスはリモートデバッガとの通信に専念.
> リモートデバッガからsocket経由でsignal発生司令がやってきたら,
> 子プロセスに対してkill(2)する...

元のdebug.rbでは
trap("INT") {  DEBUGGER__::CONTEXT.interrupt }
となってるので、debugger-srv.rb から特定文字列が送られて来たら
DEBUGGER__::CONTEXT.interrupt やればいいのかな。

-- 
人生を背負い投げ

菊谷 誠(Kikutani Makoto)  kikutani / sprintmail.com