Есть ли способ установить точку останова для отладки в среде, в которой не установлены гемы, такие как binding.pry? - PullRequest
2 голосов
/ 07 апреля 2020

С этого апреля я участвовал в новом проекте, в котором не установлены гемы для отладки, и мне не разрешено устанавливать новые.

Я хотел бы установить точку останова и увидеть внутреннюю часть переменных, таких как binding.pry. Я гуглил для отладки таким способом без новой установки гемов или использования расширений VScode, но большинство страниц требуют от меня их установки.

Буду очень признателен, если вы поделитесь со мной своими идеями отладка в пути.

== Дополнительная информация от 8 апреля 2020 г. ==

Ruby версия 1.8.7. Версия Rails 2.3.5.

1 Ответ

2 голосов
/ 07 апреля 2020

К сожалению, Ruby на самом деле не имеет встроенного отладчика на основе точек останова в этом смысле.

Самое близкое, что вы можете сделать, это запустить промежуточную программу сеанса IRB, которая останавливает его и позволяет проверять текущее состояние программы, оценивая команды Ruby. Это доступно в Ruby 2.4 и выше как binding.irb. (Для этого доступны документы для класса Binding .)

IRB не позволяет вам двигаться вперед, как Pry с Pry-Nav, но вы можете просто вставить выражения binding.irb в любом количестве мест, где вам нужно, и exit от IRB, чтобы "перейти" к следующему.

Возьмите эту простую программу. Я хочу проверить значение этих трех переменных, которые я назначил, поэтому я положил туда binding.irb:

puts "=== Hello! ==="

a = 1
b = 2
c = 3

binding.irb

puts "=== Goodbye! ==="

После запуска этой программы Ruby выдаст запрос IRB после его оценки c = 3, где вы можете запустить Ruby код для проверки значений и еще много чего (наберите exit, чтобы оставить):

=== Hello! ===
From: test.rb @ line 7 :
    2: 
    3: a = 1
    4: b = 2
    5: c = 3
    6: 
 => 7: binding.irb
    8: 
    9: puts "=== Goodbye! ==="
irb(main):001:0> a
=> 1
irb(main):002:0> b
=> 2
irb(main):003:0> c
=> 3
irb(main):004:0> exit
=== Goodbye! ===
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...