簡體   English   中英

如何使用 Ruby Pry 跳出循環?

[英]How do I step out of a loop with Ruby Pry?

我在 Rails 應用程序中使用 Pry。 我在模型的循環中設置了binding.pry以嘗試調試問題。 例如:

(1..100).each do |i|
  binding.pry
  puts i
end

當我輸入quit ,它會進入下一次迭代並再次停止。 有沒有辦法跳出循環,這樣我就不必鍵入quit 100 次?

目前我知道如何擺脫它的唯一方法是使用CTRL + C並重新啟動應用程序。

要無條件退出 Pry,請鍵入

exit-program

從@Nick 的評論中編輯:也有效:

!!!

我用:

disable-pry

這將保持程序運行,但會阻止它繼續停止執行。 這在您在控制台中調試時特別有用。

要退出所有內容,請使用:

exit!

這應該忽略所有正在進行的綁定。

三重感嘆號 ( !!! ) 會做到這一點。

disable-pry

要重新啟用,請將其添加到您的控制器

ENV['DISABLE_PRY'] = nil

binding.pry語句與 GDB 中的斷點完全相同。 GDB 中這樣的斷點也會被擊中 100 次。

如果您只希望binding.pry被命中一次,則在循環的第一次迭代中,請對binding.pry使用條件,如下所示:

(1..100).each do |i|
  binding.pry if i == 1
  puts i
end

然后只需鍵入exit當前會話。

使用 gem pry-moves您可以使用f (完成命令)跳出循環


例子:

    42: def test
    43:   3.times do |i|
 => 44:     binding.pry
    45:     puts i
    46:   end
    47:   puts :finish
    48: end

[1] pry(main)> f
0
1
2

Frame: 0/1 method
From: playground/sand.rb:47 main

    42: def test
    43:   3.times do |i|
    44:     binding.pry
    45:     puts i
    46:   end
 => 47:   puts :finish
    48: end

按'q',你會看到這樣

[1] pry(#<AlbumsController>)>

類型

exit

如果沒有,這個詞就可以:

control + c

基於以上兩個先前的答案:

謝謝你們! 你的建議對我幫助很大!

我只想分享一個簡單的愚蠢技巧,我個人使用它來不用擔心DISABLE_PRY環境變量。 將此回調永久添加到項目的基本控制器ApplicationController中。 每次調用disable-pry pry 時,它都會自動重新啟用 PRY:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :reenable_pry

  private

  def reenable_pry
    ENV['DISABLE_PRY'] = nil
  end
end

如果你只需要調試一次迭代,你可以只引發錯誤,逃避保證:

(1..100).each do |i|
  binding.pry
  raise
  puts i
end

或有條件:

(1..100).each do |i|
  if i == 50
    binding.pry 
    raise
  end
  puts i
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM