2017-12-20 1 views
1

Nehmen Sie zum Beispiel das folgende Verfahren, und dann der Aufruf des Verfahrens:Wie kann ich eine Ruby-Methode debuggen und den Wert meiner lokalen Variablen ändern sehen?

def count(n) 
    x=3 
    y=5 

    n+=x 
    n-=y 

    puts n 
end 

count(3) 

ich mich gefragt, ob es überhaupt ist, dass wenn ich das Skript in meinem Terminal laufen, wenn es um die Zählung wird (3) Zeile, wo die Methode tatsächlich aufgerufen wird, anstatt einfach "n" auszugeben, gibt es trotzdem, dass ich die Methode Zeile für Zeile mit einem Fenster durchlaufen kann, in dem ich meine lokalen Variablen (n, x und y) sehen kann Ich kann den Wert von "n" ändern, wenn die Methode ausgeführt wird, bevor dieser endgültige Wert an mein Terminal ausgegeben wird.

Antwort

1

Sie können dies mit dem byebug Edelstein erreichen.

Sie können entweder Stützpunkte überall in Ihrem Code hinzufügen, indem Sie einfach eine byebug Linie eingesetzt wird, oder Sie können durch den Aufruf Ihr Skript wie so das gesamte Skript im Debug-Modus auszuführen:

byebug something-awesome.rb 

Wenn Sie Debug-Modus zu gelangen, Sie können den Code Zeile für Zeile mit dem Befehl step durchlaufen.

Hier ist ein Beispiel dafür, was dieser Prozess aussehen würde:

[1, 10] in /Desktop/something-awesome.rb 
=> 1: def count(n) 
    2: x = 3 
    3: y = 5 
    4: 
    5: n += x 
    6: n -= y 
    7: 
    8: puts n 
    9: end 
    10: 
(byebug) step 

[2, 11] in /Desktop/something-awesome.rb 
    2: x = 3 
    3: y = 5 
    4: 
    5: n += x 
    6: n -= y 
    7: 
    8: puts n 
    9: end 
    10: 
=> 11: count(3) 
(byebug) step 

[1, 10] in /Desktop/something-awesome.rb 
    1: def count(n) 
=> 2: x = 3 
    3: y = 5 
    4: 
    5: n += x 
    6: n -= y 
    7: 
    8: puts n 
    9: end 
    10: 
(byebug) step 

[1, 10] in /Desktop/something-awesome.rb 
    1: def count(n) 
    2: x = 3 
=> 3: y = 5 
    4: 
    5: n += x 
    6: n -= y 
    7: 
    8: puts n 
    9: end 
    10: 
(byebug) x 
3 

Beachten Sie, dass, nachdem ich letzte Zeile 2 (am unteren Rande der Konsolenausgabe) getreten habe, hat ich jetzt x geben kann, was zu sehen Der Wert von x ist an dieser Stelle im Code. Eine Liste aller verfügbaren Befehle finden Sie in der der Byebug-Dokumentation.

+0

Wie würden Sie den Edelstein für das Beispiel verwenden, das vom OP gegeben wird? –

+0

@SagarPandya hat meine Antwort aktualisiert. – jeffdill2

+0

Das ist ein exzellentes Update, das jedem Leser einen Vorgeschmack darauf gibt, was der Edelstein kann. Nice (Winter Bash) Frisur auch, passt zu dir :) –

0

Ich liebe absolut die pry gem.

Es ist eine wunderbare und leistungsstarke Schnittstelle, die Sie Verzeichnis durch Instanzen und Klassen (dh cd User.first), Listenverfahren (ls) und sogar interagieren mit der Schale (shell-mode; .pwd) verändert werden kann - alle durch eine einfache binding.pry fallen aus, wo immer Sie wollen

Auch erwähnenswert, dass Ruby 2.5 kommt mit binding.irb Versand - Ich habe es noch nicht gesehen, aber das wird das ursprüngliche Äquivalent sein und hoffentlich die Notwendigkeit für Edelsteine ​​von Drittanbietern zu entfernen.

Verwandte Themen