Jak wyjść z pętli z Ruby Pry?
Używam Pry z moją aplikacją Rails. Ustawiam binding.pry
wewnątrz pętli w moim modelu, aby spróbować debugować problem. Na przykład:
(1..100).each do |i|
binding.pry
puts i
end
Kiedy wpiszę quit
, przechodzi do następnej iteracji i zatrzymuje się ponownie. Czy jest sposób, aby wyjść z pętli, żebym nie musiał pisać quit
100 razy?
Obecnie jedynym sposobem na wydostanie się z niego jest użycie CTRL+C i uruchom ponownie aplikację.
9 answers
Aby wyjść z Prypeci, wpisz
exit-program
Edit from @ Nick ' s comment : działa również:
!!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-22 14:05:26
Używam:
disable-pry
To spowoduje, że program będzie działał, ale powstrzyma go przed kontynuowaniem wykonywania. Jest to szczególnie przydatne podczas debugowania w konsoli.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 17:39:07
Aby wyjść ze wszystkiego, użyj:
exit!
Powinno to ignorować wszystkie trwające wiązania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 16:22:43
Potrójny wykrzyknik (!!!
) zrobiłby to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 16:20:45
Użyj
disable-pry
Aby zmienić, dodaj to do kontrolera
ENV['DISABLE_PRY'] = nil
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 16:22:23
Instrukcja binding.pry
jest dokładnie taka sama jak punkt przerwania w GDB. Taki punkt przerwania w GDB też zostałby trafiony 100 razy.
Jeśli chcesz, aby binding.pry
został trafiony tylko raz, dla pierwszej iteracji pętli, użyj warunkowego binding.pry
w ten sposób:
(1..100).each do |i|
binding.pry if i == 1
puts i
end
Następnie kończysz bieżącą sesję, wpisując exit
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 16:23:08
Używając gem pry-moves
możesz wyjść z pętli używając f
(polecenie Zakończ)
Przykład:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-07 13:58:31
Na podstawie dwóch poprzednich odpowiedzi powyżej:
Dziękuję wam! Twoje rady bardzo mi pomogły!Chcę podzielić się prostą, głupią sztuczką, której osobiście używam, aby nie martwić się o zmienną środowiskową DISABLE_PRY
przez cały czas. Dodaj to wywołanie zwrotne do podstawowego kontrolera ApplicationController
twojego projektu na stałe. Byłoby automatycznie włącz ponownie PRY za każdym razem, gdy wywołane jest disable-pry
:
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :reenable_pry
private
def reenable_pry
ENV['DISABLE_PRY'] = nil
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 07:57:52
Naciśnij "q" , a zobaczysz dokładnie tak
[1] pry(#<AlbumsController>)>
Typ
exit
To jedno słowo wystarczy, jeśli nie:
control + c
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-29 07:15:35