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