如何在Ruby Pry中观察变量?

7
我正在使用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 调试器中如何实现这一点?

将byebug集成到pry中是一种相当巧妙的方法。它们通常不太兼容。我以前没有使用过watch,所以无法帮助解决这个问题。也许只需给byebug的作者发送电子邮件? - akuhn
2个回答

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

还没有机会尝试这个,但它看起来像我想要的。 - Sasgorilla

1
你应该能够编写一个插件,仅在评估后显示表达式,如果这正是你想要的Pry plugins
你可以做一些简单的事情,比如:
Pry.hooks.add_hook(:after_eval, "reporter") do |output, binding, pry|
  $watch ||= [] 
  $watch.each {|block| block.call} 
end

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

或者类似这样的东西,在每次新评估后会报告“hello”。(但是这尚未经过测试,目前正在使用移动设备)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接