是否可以从另一个线程获得一个Kernel#caller输出或者更好的是从后台堆栈主线程,这对我来说是一种分析器。

最佳答案

有Thread#backtrace方法可获取某些线程的函数backtrace:
https://ruby-doc.org/core-2.4.1/Thread.html#method-i-backtrace
backtrace→数组单击以切换源
返回目标线程的当前回溯。
例如,检查这个项目:https://github.com/frsyuki/sigdump(它将显示ruby和jruby的回溯和一些内存使用信息)
sigdump-简而言之:javavmforruby的sigquit(使用signal显示ruby进程的stacktrace而不重新启动它)。
... 只要发送sigcont信号,就会将回溯和内存配置文件转储到/tmp/sigdump-.log文件。
sigdump转储以下信息(另请参阅示例输出):
所有线程的回溯
https://github.com/frsyuki/sigdump/blob/master/lib/sigdump.rb

    dump_all_thread_backtrace(io)
...
    Thread.list.each do |thread|
      dump_backtrace(thread, io)
...
  def self.dump_backtrace(thread, io)
    status = thread.status
    if status == nil
      status = "finished"
    elsif status == false
      status = "error"
    end

    io.write "  Thread #{thread} status=#{status} priority=#{thread.priority}\n"
    if thread.backtrace
      thread.backtrace.each {|bt|
        io.write "      #{bt}\n"
      }
    end

    io.flush
    nil
  end

07-25 21:40