如何在Ruby Pry中观察变量?

时间:2017-01-23 16:54:51

标签: 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

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

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

2 个答案:

答案 0 :(得分:1)

你应该能够编写一个插件,只是在评估了完全你想要的内容后才显示表达式。 Pry plugins

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

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

$watch = [-> { puts "hello"}] 

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

答案 1 :(得分:1)

使用pry-moves,您可以使用watch variable - 这将在每一步显示变量值。