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