Как я могу посмотреть переменную в Ruby Pry?

Я использую 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? отладчик?


person Sasgorilla    schedule 23.01.2017    source источник
comment
Интеграция byebug в pry — это настоящий хак. Они не часто хорошо играют вместе. Раньше часами не пользовался, так что с этим помочь не могу. Может быть, просто написать автору byebug?   -  person akuhn    schedule 23.01.2017


Ответы (2)


Вы должны иметь возможность написать подключаемый модуль, который просто показывает выражения после оценки того, именно ли это то, что вам нужно. Плагины Pry

Что вы могли бы сделать что-то простое, например

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

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

Или что-то в этом роде будет сообщать «привет» после каждой новой оценки. (однако это не проверено, в настоящее время на мобильном телефоне)

person Matthew Brock Carey    schedule 01.06.2017

Используя pry-moves, вы можете использовать watch variable - это будет отображать значение переменной на каждом шаге .

person Daniel Garmoshka    schedule 01.05.2018
comment
У меня еще не было возможности попробовать это, но это похоже на то, что я хочу. - person Sasgorilla; 02.06.2018