den folgenden Code Gegeben:Set bedingter Haltepunkt mit hebeln-byebug
require 'pry-byebug'
10.times.with_index do |i|
binding.pry
puts i
end
würde Ich mag auf "Schleife, bis i == 5
dann brechen", während im Innern pry-byebug
. Von der Ausführung help break
scheint es, als ob Sie Breakpoints durch "Breakpoint #" oder "line #" identifizieren können. Es scheint auch, wie Sie Bedingungen verwenden können, aber ich bin nicht immer daran arbeiten:
Der Versuch, Haltepunkt auf Zeile # setzen:
$ ruby foo.rb
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[1] pry(main)> break foo.rb:5 if i == 5
Breakpoint 1: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ 5 (Enabled) Condition: i == 5
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[2] pry(main)> continue
0
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[2] pry(main)> i
=> 1
Erste Einstellung Haltepunkt dann Zustand auf Unterbrechungspunkt setzen:
➜ ~/D/w/t/pry_debug ruby foo.rb
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[1] pry(main)> break foo.rb:15
Breakpoint 1: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ 15 (Enabled)
[2] pry(main)> break --condition 1 i == 5
[3] pry(main)> c
0
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[3] pry(main)> i
=> 1
Wie Sie sehen können, respektiert pry-byebug
in beiden Fällen nicht die Bedingung, weil es zu früh stoppt. Wie bekomme ich es zur Arbeit?
Funktioniert es nicht, wenn die 'binding.pry' in der Schleife ist, weil ein" breakpoint "anders als ein' binding.pry' ist? Obwohl ich in meinem Beispiel einen Breakpoint gesetzt habe, treffe ich immer noch meine 'binding.pry' in jedem Durchlauf. – mbigras
Ja, du bringst jedes Mal 'binding.pry' durch. Ruby hat keine Ahnung, dass "binding.pry" ein spezieller Befehl ist, den es nur einmal ausführen sollte, es ist nur ein Aufruf an eine Methode, soweit es das betrifft. Ein Breakpoint im Debugger tritt auf einer niedrigeren Ebene auf. Du solltest eine Weile mit Byebug spielen, außerhalb von Pry, und es wird mehr Sinn ergeben.Ich benutze fast immer byebug für mein Debugging, sobald ich vorbei bin, aber ich habe vor Jahren in der Assemblersprache angefangen, deshalb sind Debugger ziemlich natürlich für mich. –
Würdest du sagen "byebug" ist wie "gdb"? – mbigras