pry etwas tut ein bisschen wie diese.
Wenn ich ein Skript test.rb
wie so:
require 'pry'
result = []
5.times do |i|
result << "#{i}"
binding.pry if i == 2
end
puts "result is ", result.join(",")
Dann am 3. Iteration es an einem Haltepunkt anhalten, wo ich in Befehle eingeben kann. Wenn ich
edit test.rb
dann $EDITOR
(oder nano) eingeben wird geöffnet, und ich kann den Quellcode ändern. Wenn ich den Texteditor verlasse, befindet sich der Schlüssel auf dem gleichen Haltepunkt, aber er wird den vorhandenen Code erneut ausführen, bis er den geänderten Code verwendet. Dies ist eine Art Untershell, und wenn Sie es verlassen, wird der ursprüngliche Breakpoint mit dem ursprünglichen Code zurückgebracht. Nachdem ich diesen zweiten Haltepunkt verlassen habe, komme ich wieder zur bash und meine Änderungen an der Datei wurden beibehalten.
Anstatt einen Pfad an edit
zu übergeben, können Sie auch einen Methodennamen übergeben, der jedoch den gleichen Effekt hat (eine Subshell). So in jedem Fall mit dem obigen Code, wenn ich
geändert
result << "#{i}"
zu
result << "#{i}*"
, würde ich entweder result is 0,1,2,3,4
oder result is 0*,1*,2*,3*,4*
, sieht aber nicht result is 0,1,2,3*,4*
.
Darüber hinaus ist es möglich, lokale Variablen leicht in einem Haltepunkt zu bearbeiten. zum Beispiel:
require 'pry'
a = 1
binding.pry
puts a
Wenn ich a = 2
und dann control+d
beenden den Haltepunkt, das Programm druckt 2
wie erwartet ein. Sie können Laufzeit-Metaprogrammierung auch verwenden, um Methoden, Instanzvariablen usw. zu überschreiben.
Haben Sie sich in 'load' nachladen' .rbs'? –