如何在Ruby Pry中观察变量?

Sas*_*lla 5 ruby debugging pry byebug

我正在使用Ruby 2.2.2,Pry和'pry-byebug'.该continue语句删除了所有的监视变量pry-byebug:

[1] pry(main)> watch foo
Watching foo
watch: foo => 42
[2] pry(main)> watch
Listing all watched expressions:

1: foo => 42

[3] pry(main)> continue
[1] pry(main)> watch
No watched expressions
Run Code Online (Sandbox Code Playgroud)

每次丢失它们都会continue让看到的表情变得毫无价值.如果我使用next并代替代码中的相同点,则观察到的表达式仍然存在; 只是continue导致问题的原因.目前我甚至无法在watch声明中找到任何文档,所以我不知道为什么会这样.

更一般地说,我只想在每个Pry提示符上打印出一组表达式的值(或者,如果它们自上次打印以来它们已经改变了,可能会将它们打印出来.)如何在Ruby中实现这一点调试器?

Mat*_*rey 1

您应该能够编写一个插件,在评估这是否 正是您想要的之后仅显示表达式。 撬动插件

你可以做一些简单的事情,比如

Pry.hooks.add_hook(:after_eval, "reporter") do |output, binding, pry|
  $watch ||= [] 
  $watch.each {|block| block.call} 
end

$watch = [-> { puts "hello"}] 
Run Code Online (Sandbox Code Playgroud)

或者类似的东西,会在每次新评估后报告“你好”。(但这尚未测试,目前在移动设备上)