Как скопировать несколько строк кода в byebug?

byebug, похоже, не может обрабатывать несколько строк кода.

Пример

Я помещаю byebug в контроллер, и следующие строки кода (это может быть что угодно, здесь просто пример):

    payment_intent = Stripe::PaymentIntent.create({
      payment_method_types: ['card'],
      amount: @amount_minor_unit,
      currency: @currency,
      application_fee_amount: 123, # STODO
      transfer_data: {
        destination: @star.stripe_account,
      },
    })

Но он делает это: введите здесь описание изображения

Если код отредактирован так, что он находится в одной строке, он преуспевает:

payment_intent = Stripe::PaymentIntent.create({payment_method_types: ['card'],amount: @amount_minor_unit,currency: @currency,application_fee_amount: 123, transfer_data: {destination: @star.stripe_account,},})

Но это ручное редактирование крайне утомительно. Как я могу заставить byebug принимать несколько строк кода, чтобы я мог копировать/вставлять напрямую откуда-то, например, из контроллера, на сервер rails, остановленный byebug?

Другие идеи

После нажатия ctrl+d в консоли для выхода из byebug, далее ошибки браузера, потом я могу скопировать код в браузер, но происходит то же самое, где он принимает код, если все в одной строке:

введите здесь описание изображения

..но в противном случае ошибки с той же синтаксической ошибкой, что и выше.


person stevec    schedule 29.11.2020    source источник
comment
какая причина помещать выражение, как в примере, в byebug, когда вы можете отладить результат позже, просто проверив payment_intent   -  person snake    schedule 29.11.2020
comment
Я бы сказал использовать step и next вместо копирования нескольких строк в byebug   -  person Deepak Mahakale    schedule 29.11.2020
comment
@DeepakMahakale сейчас гуглит. есть ли где-нибудь пример того, как это сделать?   -  person stevec    schedule 29.11.2020
comment
@DeepakMahakale из поиска Google, я думаю, вы имеете в виду pry-byebug, который Я еще не использовал, но буду продолжать изучать   -  person stevec    schedule 29.11.2020


Ответы (3)


Я использую гем pry-byebug, и он имеет нужное вам поведение, вы можете вставить несколько строк кода, не выполняя его сразу.

https://github.com/deivid-rodriguez/pry-byebug

Вы можете просто добавить его в свой файл gem и установить точки останова с помощью binding.pry

person Clara    schedule 07.12.2020
comment
Спасибо! Я пытаюсь вставить тот же код в вопрос (то есть одну команду, разделенную на несколько строк) после установки pry-byebug и наличия byebug в контроллере, и я получаю тот же результат. - person stevec; 08.12.2020
comment
Пожалуйста, используйте binding.pry в контроллере - person Clara; 08.12.2020

что работает для меня, так это просто скопируйте весь код в один и вставьте его в браузер, где мы вставляем ссылку, не нажимайте ввод. он отформатирует его в одну строку. затем просто скопируйте и вставьте в byebug cli.

person adityapandit17    schedule 29.11.2020
comment
Спасибо. Я ценю изобретательность, но с этим есть несколько проблем. Во-первых, если в нескольких строках кода есть комментарии, они будут помещены в одну строку, и это не будет допустимым ruby, поэтому ошибка все равно будет. Кроме того, это включает в себя перемещение byebug от проблемы до проблемы после нее (чтобы приложение в браузере выдавало ошибку, чтобы вызвать терминал кода в браузере). Проголосовал за помощь все равно - person stevec; 29.11.2020
comment
если вам действительно нужно отладить, вы должны делать это построчно, но для блока кода, который должен работать, как я сказал в своем ответе выше. о комментариях вы можете удалить их вручную. - person adityapandit17; 07.12.2020

Комментарии уже дали вам ответ, но я формализую его здесь.

Вместо того, чтобы пытаться скопировать и вставить строку кода, которую вы хотите выполнить, вы можете просто использовать step, чтобы выполнить шаг по коду. документация Byebug содержит список команд, которые вы можете использовать. Step запустит вашу программу по одной строке за раз.

def index
  byebug
  init_item = {
    a: "foo", b: "bar"
  }
  // omitted code

При входе в точку останова выше init_item будет равно нулю. Команда step (или s) продвинет код на одну строку, а после этого init_item будет инициализирована до того, что мы укажем.

Иногда byebug вводит несколько строк вниз, но использование up (для перехода вверх по стеку вызовов) позволит вам перейти к интересующей вас строке.

Нет необходимости копировать код в byebug, вы можете просто step пройти через него.

person Cassandra S.    schedule 07.12.2020