Suche…


Debuggen der Rails-Anwendung

Um eine Anwendung debuggen zu können, ist es sehr wichtig, den Ablauf der Logik und der Daten einer Anwendung zu verstehen. Es hilft bei der Behebung logischer Fehler und erhöht die Programmierkenntnisse und die Codequalität. Zwei beliebte Edelsteine ​​zum Debuggen sind der Debugger (für Ruby 1.9.2 und 1.9.3) und Byebug (für Ruby> = 2.x).

.rb , um .rb Dateien zu debuggen:

  1. Fügen byebug der development von Gemfile debugger oder byebug Gemfile
  2. Führen Sie die bundle install
  3. Fügen byebug als Haltepunkt debugger oder byebug
  4. Führen Sie den Code aus oder stellen Sie eine Anfrage
  5. Das Rail-Serverprotokoll wird am angegebenen Haltepunkt angehalten
  6. An diesem Punkt können Sie Ihr Serverterminal wie eine rails console und die Werte von Variablen und Parametern überprüfen
  7. Um zur nächsten Anweisung zu gelangen, geben Sie next und drücken Sie die enter
  8. Geben Sie c und drücken Sie die enter

Wenn Sie .html.erb Dateien debuggen .html.erb , wird der Haltepunkt als <% debugger %> hinzugefügt

Debuggen in Ihrer IDE

Jede gute IDE bietet eine grafische Benutzeroberfläche für das interaktive Debuggen von Ruby-Anwendungen (und damit auch von Rails-Anwendungen), in der Sie Haltepunkte hinzufügen, überwachen und bei Ausnahmebedingungen automatisch pausieren können. Außerdem können Sie die Codeausführung Schritt für Schritt und Zeile für Zeile verfolgen.

Sehen Sie sich beispielsweise eine der besten Ruby-IDEs an, die Debugging-Funktionen von RubyMine

Geben Sie hier die Bildbeschreibung ein

Schnelles Debuggen von Ruby on Rails + Beratung für Anfänger

Das Debuggen durch Auslösen von Ausnahmen ist viel einfacher als das Schielen durch print Bei den meisten Fehlern ist es byebug viel schneller als das Öffnen eines irb-Debuggers wie pry oder byebug . Diese Tools sollten nicht der erste Schritt sein.


Ruby / Rails schnell debuggen:

1. Fast-Methode: Dann eine Exception .inspect und das Ergebnis .inspect

Der schnellste Weg zum Debuggen von Ruby-Code (insbesondere von Rails-Code) besteht darin raise eine Ausnahme entlang des Ausführungspfads Ihres Codes .inspect während .inspect für die Methode oder das Objekt (z. B. foo ) .inspect :

raise foo.inspect

Im obigen Code löst raise eine Exception , die die Ausführung Ihres Codes .inspect , und gibt eine Fehlermeldung aus, die zweckmäßigerweise Informationen über das Objekt / die Methode (dh foo ) in der Zeile enthält, die Sie debuggen möchten.

Diese Technik ist nützlich, um ein Objekt oder eine Methode schnell zu untersuchen ( z. B. ist es nil ? ) Und sofort zu bestätigen, ob eine Codezeile überhaupt innerhalb eines gegebenen Kontextes ausgeführt wird.

2. Fallback: Verwenden Sie einen Rubin- IRB- Debugger wie byebug oder pry

Erst nachdem Sie Informationen über den Status des Codeausführungsablaufs erhalten haben, sollten Sie in Erwägung ziehen, zu einem Ruby-Edelstein-Debugger wie pry oder byebug in dem Sie tiefer in den Status von Objekten innerhalb Ihres Ausführungspfads byebug können.

So verwenden Sie den byebug Edelstein zum Debuggen in Rails:

  1. Fügen Sie den gem 'byebug' innerhalb der Entwicklungsgruppe in Ihrem Gemfile hinzu
  2. Führen Sie die bundle install
  3. byebug die Phrase byebug in den Ausführungspfad des Codes ein, den Sie untersuchen möchten.

byebug diese byebug Variable ausgeführt wird, wird eine Ruby-IRB-Sitzung Ihres Codes geöffnet, sodass Sie direkt auf den Status der Objekte zugreifen können, wie sie sich zu diesem Zeitpunkt in der Ausführung des Codes befinden.

IRB-Debugger wie Byebug sind nützlich, um den Status Ihres Codes bei der Ausführung genau zu analysieren. Sie sind jedoch zeitaufwändiger als das Erheben von Fehlern. Daher sollten sie in den meisten Situationen nicht der erste Schritt sein.


Allgemeine Anfängerhinweise

Wenn Sie versuchen, ein Problem zu debuggen, sollten Sie immer folgendes tun : Lesen Sie die! @ # $ Ing-Fehlermeldung (RTFM).

Das bedeutet, dass Sie die Fehlermeldungen sorgfältig und vollständig lesen, bevor Sie handeln, damit Sie verstehen, was Sie zu sagen versuchen. Stellen Sie beim Debuggen beim Lesen einer Fehlermeldung die folgenden mentalen Fragen in dieser Reihenfolge :

  1. Welche Klasse bezieht sich der Fehler? (dh ich habe die richtige Objektklasse oder ist mein Objekt gleich nil ? )
  2. Welche Methode bezieht sich der Fehler? (dh ist ihr Typ in der Methode; kann ich diese Methode für diesen Objekttyp / diese Objektklasse aufrufen? )
  3. Schließlich, was ich aus meinen letzten beiden Fragen entnehmen kann, welche Codezeilen sollte ich untersuchen? (Denken Sie daran: Die letzte Codezeile in der Stack-Ablaufverfolgung muss nicht unbedingt das Problem sein.)

Achten Sie im Stack-Trace besonders auf Codezeilen, die aus Ihrem Projekt stammen (z. B. Zeilen, die mit app/... wenn Sie Rails verwenden). In 99% der Fälle liegt das Problem bei Ihrem eigenen Code.


Um zu veranschaulichen, warum Dolmetschen in dieser Reihenfolge wichtig ist ...

ZB eine Ruby-Fehlermeldung, die viele Anfänger verwirrt:

Sie führen Code aus, der zu einem bestimmten Zeitpunkt als solcher ausgeführt wird:

@foo = Foo.new

...

@foo.bar

und Sie erhalten einen Fehler, der besagt:

undefined method "bar" for Nil:nilClass

Anfänger sehen diesen Fehler und denken , das Problem ist , dass die Methode bar ist nicht definiert. Es ist nicht. In diesem Fehler ist der Realteil, auf den es ankommt, Folgendes:

for Nil:nilClass

for Nil:nilClass bedeutet, dass @foo ist! @foo ist keine Foo Instanzvariable! Sie haben ein Objekt, das Nil . Wenn dieser Fehler auftritt, ist es einfach rubin versuchen , Ihnen zu sagen , dass die Methode bar nicht für Objekte der Klasse existiert Nil . (na ja, da wir versuchen, eine Methode für ein Objekt der Klasse Foo nicht Nil ).

Aufgrund dieses Fehlers ( undefined method "bar" for Nil:nilClass ) ist es undefined method "bar" for Nil:nilClass leicht zu undefined method "bar" for Nil:nilClass , dass dieser Fehler damit zusammenhängt, dass der bar undefined . Wenn dieser Fehler nicht sorgfältig gelesen wird, fangen die Anfänger fälschlicherweise an, die Details der bar Methode auf Foo , wobei der Teil des Fehlers, der darauf hinweist, dass das Objekt die falsche Klasse ist (in diesem Fall: nil), völlig fehlt. Es ist ein Fehler, der durch das Lesen von Fehlermeldungen vollständig vermieden werden kann.

Zusammenfassung:

Lesen Sie immer sorgfältig die gesamte Fehlermeldung, bevor Sie mit dem Debuggen beginnen. Das bedeutet: Immer den Klassentyp eines Objekts in einer Fehlermeldung überprüfen Sie zuerst, dann seine Methoden, bevor Sie sleuthing in jede Stacktrace oder Codezeile beginnen , wo Sie den Fehler denken auftreten kann. Diese 5 Sekunden können Ihnen 5 Stunden Frustration ersparen.

tl; dr: Blinzeln Sie nicht bei Druckprotokollen: Erheben Sie stattdessen Ausnahmen. Vermeiden Sie Kaninchenlöcher, indem Sie die Fehler vor dem Debuggen sorgfältig lesen.

Debuggen der Ruby-on-Rails-Anwendung mit pry

pry ist ein leistungsfähiges Werkzeug, mit dem Sie jede Ruby-Anwendung debuggen können. Das Einrichten einer Ruby-on-Rail-Anwendung mit diesem Edelstein ist sehr einfach und unkompliziert.

Konfiguration

So starten Sie das Debuggen Ihrer Anwendung mit pry

  • In gem 'pry' , um die Anwendung des Gemfile und bündeln
group :development, :test do
  gem 'pry'
end
  • Navigieren Sie zum Stammverzeichnis der Anwendung auf der Terminal-Konsole und führen Sie die bundle install . Sie können es überall in Ihrer Anwendung einsetzen.

Benutzen

Die Verwendung von pry in Ihrer Anwendung umfasst lediglich die binding.pry von binding.pry an den Haltepunkten, die Sie beim Debuggen überprüfen möchten. Sie können binding.pry Haltepunkte an beliebiger Stelle in Ihrer Anwendung hinzufügen, die von Ruby Interpreter interpretiert werden (alle App / Controller, App / Modelle, App / Views-Dateien).

i) Controller debuggen

app / controller / users_controller.rb

class UsersController < ApplicationController
  def show
    use_id = params[:id]
    // breakpoint to inspect if the action is receiving param as expected
    binding.pry
    @user = User.find(user_id)
    respond_to do |format|
      format.html
    end
  end
end

In diesem Beispiel wird der Rails-Server am Haltepunkt mit einer UsersController wenn Sie versuchen, ein UsersController , show Aktion auf UsersController . Sie können das params prüfen und die ActiveRecord-Abfrage für das User von diesem Haltepunkt aus durchführen

ii) Einen View debuggen

app / views / users / show.html.haml

%table
  %tbody
    %tr
      %td ID
      %td= @user.id
    %tr
      %td email
      %td= @user.email
    %tr
      %td logged in ?          
      %td
        - binding.pry
        - if @user.logged_in?
          %p= "Logged in"
        - else
          %p= "Logged out"

In diesem Beispiel wird der Haltepunkt mit der Hebelkonsole angehalten, wenn die users/show Seite im Rail-Server vorkompiliert ist, bevor sie an den Browser des Clients zurückgesendet wird. Dieser Haltepunkt ermöglicht es, die Richtigkeit von @user.logged_in? zu debuggen @user.logged_in? wenn es sich schlecht benimmt

ii) Modell debuggen

app/models/user.rb

class User < ActiveRecord::Base    
  def full_name
    binding.pry
    "#{self.first_name} #{self.last_name}"
  end      
end

In diesem Beispiel kann der Haltepunkt zum Debuggen der Instanzmethode full_name User verwendet werden, wenn diese Methode an einer beliebigen Stelle in der Anwendung aufgerufen wird.

Zusammenfassend ist pry ein leistungsfähiges Debugging-Tool für Schienenanwendungen mit einfachem Setup und einfacher Debugging-Richtlinie. Probieren Sie es aus.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow