Точки останова с 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

Другие вопросы по тегам