なひです. > From: kikutani / sprintmail.com [mailto:kikutani / sprintmail.com] > Sent: Sunday, August 01, 1999 8:19 PM > > > 私が前回「原理的には簡単なんだが」と発言したときのアイディア > > > は以下の通りです。 > > > > > > debug.rbを改造して > > > > > > + UNIX domain socketを作り、そこからコマンド入出力を行う。 > > > > > > + UNIX domain socketに対する双方向入出力をするプログラム > > > をdebugcomm.rbとすると、kterm -e ruby debugcomm.rb <path>& > > > で入出力用ウィンドウを開く。 昨日行った本屋には入門Perlが置いてなかったのでした. 未だによくわかっていないかもしれません...^^; > > なるほど。ありがとうございます。 > > でも、ソケットって使ったことないんだよな... > > やってみました。意外に簡単でした。 > UNIXsocket/UNIXserver の使用例が全然ないので最初だけハマったけど。 > > やったことは、debug.rb を sdebug.rb にコピーし、 > > class DEBUGGER__ > def initialize > ... > ... > @debug_socket = "/tmp/ruby-debug" > @debug_port = UNIXsocket.new(@debug_socket) > end > > とし、あとはSTDINとSTDOUTを@debug_portにリプレースしただけ。 > > べつのrxvtでは以下のものを走らせている。 > > require "socket" > debug_socket = "/tmp/ruby-debug" > if FileTest.exist?(debug_socket) > File.unlink debug_socket > end > us = UNIXserver.open(debug_socket) > port = us.accept > > $reader = Thread.new do > while true > s = port.gets > printf "> %s", s > STDOUT.flush > end > end > > while true > s = STDIN.gets > printf(port, "%s", s) > end なるほどこういう手を使うのですね...この場合sdebug.rbが, まつもとさんの「debugcomm.rb」になるのかな? デバッギのラッパが実質のデバッグ処理をこなし, そいつへの入出力はリモートデバッガが行う,と. # この構成にdRubyが使えるとかっこいいですよねぇ... > せきさん # と,振ってしまうやつ.自分で作れ > なひ > この程度で一応使えてますが、C-cでdebugプロンプトに戻るのは > どうやればいいんでしょうか。debug用サーバではtrapでつかまえる > として、どうやってdebuggerに送るのかわかりませぬ。 リモートデバッガからデバッギにsignalを飛ばさないといけないですが, 間にsocketが入ってしまうと相手のプロセスIDがわからない...ので, 簡単な方法ではできないと思います. うーん,間にもう1層噛ましてみるとか. デバッギラッパでまずプロセスをforkして,子プロセスでデバッギを動作させ, 親プロセスはリモートデバッガとの通信に専念. リモートデバッガからsocket経由でsignal発生司令がやってきたら, 子プロセスに対してkill(2)する... ああ,言うだけは楽だなぁ.^^;