有没有办法使用击键来调用撬红宝石?

时间:2014-10-15 14:04:12

标签: ruby pry

我只想到能够运行一个程序然后按一下按键来调用pry和debug是多么棒。也许有一颗宝石会在运行期间动态地注入binding.pry,我不知道。如果没有,你将如何在下一行即将执行的ruby脚本之前插入binding.pry的键击?

1 个答案:

答案 0 :(得分:4)

假设有POSIX OS,您可以尝试在ruby程序中添加信号处理程序。 ruby文档甚至给出了一个用例示例:

  

..您的进程可能会捕获USR1信号并使用它来切换调试(http://www.ruby-doc.org/core-2.1.3/Signal.html

Signal.trap('USR1') do
  binding.pry
end

然后,发送信号:

kill -s SIGUSR1 [pid]

编辑:一个更完整的示例:application.rb

上面的天真建议会因ThreadError: current thread not owner而失败。这是使用全局$debug标志的更好示例。

#!/usr/bin/env ruby

require 'pry'

$debug = false
Signal.trap('USR1') do
  puts 'trapped USR1'
  $debug = true
end

class Application
  def run
    while true
      print '.'
      sleep 5
      binding.pry if $debug
    end
  end
end

Application.new.run

当application.rb在一个shell中的前台运行时,这似乎最有效,并且您从一个单独的shell发送SIGUSR1信号。

在Mac OS 10.9.5中测试。 YMMV。