こんにちは、黒田拓と申します。

ARAI Shunichi さんは書きました:
> 他スレッドの内容をダンプしたり、もしくは実行中のRubyプロセスの
> 内容をダンプ・解析するような方法があれば、是非ご教示頂きたく存じます。

偶然リファレンスでset_trace_funcという関数を見つけたのですが、これを使って、こんなスクリプトで子ス
レッドからメインスレッドのcallerを表示できました。
(環境によっては配列bsのサイズをもう少し大きくしないとうまく表示されないかもしれません)

------
#!/usr/bin/ruby
require "pp"
def recursive(n=100)
   if n>0
      rec2(n-1)
   end
end

def rec2(n)
   recursive(n)
end

$chk = false
bs = Array.new(3)

tf = lambda do |event, file, line, id, binding, klass|
   next if $chk
   bs.shift
   bs.push(binding)
end

set_trace_func(tf)

Thread.new do
   sleep(1)
   $chk=true
   bs.each_index do |i|
      puts("---- #{i} ----", eval("caller", bs[i]))
   end
   Thread.main.raise("END")
end

loop do
   recursive
end
------

-- 
--------------------------------------------------
 黒田 拓(くろだ ひらく)
    hiraku / sapporo.email.ne.jp
    http://www.hinet.mydns.jp/
--------------------------------------------------