[英]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.