Fri, Jul 30, 1999 at 02:13:13PM +0900 において
kikutani / sprintmail.com 曰く:

> On Fri, 30 Jul 1999 12:53:46 +0900,
> matz / netlab.co.jp (Yukihiro Matsumoto) wrote:
> 
> > 私が前回「原理的には簡単なんだが」と発言したときのアイディア
> > は以下の通りです。
> > 
> >   debug.rbを改造して
> > 
> >     + UNIX domain socketを作り、そこからコマンド入出力を行う。
> > 
> >     + UNIX domain socketに対する双方向入出力をするプログラム
> >       をdebugcomm.rbとすると、kterm -e ruby debugcomm.rb <path>&
> >       で入出力用ウィンドウを開く。
> 
> なるほど。ありがとうございます。
> でも、ソケットって使ったことないんだよな...

やってみました。意外に簡単でした。
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

この程度で一応使えてますが、C-cでdebugプロンプトに戻るのは
どうやればいいんでしょうか。debug用サーバではtrapでつかまえる
として、どうやってdebuggerに送るのかわかりませぬ。

-- 
人生を背負い投げ

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