如何将多行代码复制到byebug中?

How to copy multiple lines of code into 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 接受多行代码,这样我就可以 copy/paste 直接从控制器之类的地方进入 byebug 停止的 rails 服务器?

其他想法

在console中按ctrl+d退出byebug,然后浏览器报错,然后复制代码到浏览器即可,但同样的事情发生了,如果代码全部在一行中,它会接受代码:

..但否则会出现与上述语法错误相同的错误。

对我有用的是只需复制所有代码并将其粘贴到我们粘贴 link 的浏览器中,不要单击回车。它会将其格式化为一行。然后只需复制并粘贴到 byebug cli。

评论里已经给你答案了,我这里正式化一下。

您无需尝试复制和粘贴要执行的代码行,只需使用 step 来“逐步”执行代码即可。 Byebug's documentation 为您提供了可以使用的命令列表。 Step 将 运行 您的程序一次一行。

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

进入上面的断点,init_item将为nil。命令step(或s)将使代码前进一行,之后,init_item将被初始化为我们指定的内容。

有时 byebug 会“向下”输入几行,但使用 up(向上调用堆栈)会让您导航到您感兴趣的行。

无需将代码复制粘贴到 byebug 中,您只需 step 即可。

我使用 gem pry-byebug,它具有您想要的行为,您可以粘贴多行代码而无需立即执行。

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

您可以将它添加到您的 gem 文件中并使用 binding.pry

设置断点