Точки останова с pry-byebug не запускаются в консоли
Я пытаюсь использовать pry и pry-byebug для пошагового выполнения кода в консоли Rails. Я начал консоль с
pry -r ./config/environment
Затем я установил точку останова:
break Foo#bar
Тогда сделайте новый Foo
и позвонить bar
в теме:
Foo.new.bar
Я ожидал шаг в Foo#bar
, но вместо этого метод просто выполняется нормально.
Есть ли способ заставить этот рабочий процесс работать?
2 ответа
Я нашел ответ: отладчик не является повторно входящим. Так что вам нужно сделать это:
[1] pry(main)> binding.pry
[1] pry(main)> break Foo#bar
Breakpoint 1: Foo#bar (Enabled) :
6: def bar
7: end
[2] pry(main)> c # continue and exit the debugger we started on the first line
=> nil
[3] pry(main)> Foo.new.bar
Breakpoint 1. First hit.
Вот как я обычно использую pry-byebug
Добавить звонок в binding.pry
до первой строки метода Foo#bar
Бежать rails console
Вызов Foo.new.bar
Вы должны увидеть этот ответ сейчас
Хм, когда я использую pry-byebug для отладки своего кода, я использую следующий способ:
Сначала потребуйте драгоценный камень pry-byebug в начале кодирования
требовать 'pry-byebug'
def main # Кодирование помещает "Hello" binding.pry # здесь точка останова ставит конец "World"
главный
Затем при запуске мой терминал вернется в режим irb и вернется:
> 3: def main
> 4: puts "Hello"
> 5:
> 6: binding.pry
> => 7: puts "World!"
> 8: end
>
> [1] pry(main)>
Таким образом, код указывает, где я сейчас нахожусь, и с этого момента я мог проверять каждую переменную, прочитанную до точки останова (в строке 6). Точка останова указывает, что терминал еще не читал данные после строки 6, поэтому, если бы у меня были там переменные, терминал не распознал бы их.
Затем я мог бы ввести следующий, чтобы binding.pry перешел к следующей доступной точке binding.pry или прошел через весь код. Или я мог просто ввести continue.
Что очень важно помнить, так это удалить строку require 'pry-byebug' и все строки с точками останова перед коммитом кода, потому что мы не хотим, чтобы код застревал в этих точках, верно? Пользователь может не знать, как с этим бороться:)
Надеюсь, это помогло! Впервые пытаюсь внести свой вклад в это потрясающее сообщество:D