Frage

Derzeit mache ich Folgendes:

  • Wenn es sich um eine kleine Änderung handelt, können Sie zurückkehren, sparen und testen.
  • Für eine große Änderung oder neue Datei löschen oder Kommentar 1/2 den Code und testet erneut. Führen Sie eine binäre Suche durch, bis ich den kaputten Code gelöscht/gefunden habe.

Der Anrufstack scheint nichts in meiner .rhtml -Datei zu entsprechen.

(erb):6:in `block in <main>'
/opt/local/lib/ruby/1.9.1/erb.rb:753:in `eval'
/opt/local/lib/ruby/1.9.1/erb.rb:753:in `result'
bin/correct.rb:45:in `block in <main>'
/opt/local/lib/ruby/1.9.1/webrick/httpservlet/prochandler.rb:26:in `call'
War es hilfreich?

Lösung

Wie Daniel sagte, hilft Ihnen die Fehlermeldung in den meisten Fällen, schnell herauszufinden, wo sich der Fehler befindet.

Es gibt in der Tat einige Gelegenheiten, in denen es nicht tut.

Die dummer, schnellere Art, diese binäre Suche durchzuführen, besteht darin, einfach eine falsche Zeile einzufügen, wie

<%= the_error_is_after_this_line %>

und bewegen Sie die Linie, bis Sie die genaue Reihe finden.

Ich bin nicht zu den hellen Programmierern, die tonnenweise Zeilen pro Zeit schreiben können, die nur funktionieren. Normalerweise entwickle ich mich durch kleine Schritte und lade die Seite auf dem Browser jedes Mal neu.

Das heißt, der bessere Weg, um schwere Ansichten (oder Methoden oder was auch immer) zu vermeiden, besteht darin, einfache, kurze, kurze zu schreiben. Meine Faustregel ist, dass ich in der Lage sein muss, die gesamte Ansicht (oder Methode) im Editor -Fenster zu lesen, es sei denn, es handelt sich nur um HTML.

Verwenden Sie immer Helfer und teilweise Ansichten. Können Sie mehr als zwei () oder [] in einer Zeile Ihrer ERB -Ansicht zählen? Wenn ja, verwenden Sie einen Helfer.

Können Sie Ihrer Ansicht mehr als zwei oder drei Blöcke zählen? Verwenden Sie einige Partials.

Andere Tipps

Ich bin mir nicht sicher, ob dies für dieses Problem anwendbar ist, aber vielleicht hilft es jemandem. Ich benutze Rails 5 und wenn Sie setzen

    <% debugger %>

In Ihrer HTML.ERB -Datei wird das Terminalfenster, in dem Ihr Rails -Server ausgeführt wird, pausieren. Von dort aus können Sie alle Parameter oder Variablen, die Ihre HTML.ERB -Datei hat, debuggen.

Im Allgemeinen sagen Sie Erb -Fehler, wo sie aufgetreten sind. Zum Beispiel ist hier Ihr Fehler in Zeile 6 der ERB -Datei. Sie haben die Fehlermeldung weggelassen, die mit der Backtrace geliefert wurde, aber dies zeigt normalerweise, nach welcher Art von Fehler Sie suchen müssen. Zum Beispiel in meinem einfachen Test hier:

NameError: undefined local variable or method `asdf' for main:Object
  from (erb):7
  from (irb):6

Es ist klar genug, was und wo schief geht.

Können Sie weitere Informationen über Ihren Fehler und die ERB veröffentlichen, die ihn verursacht haben?

Auf Rails 5 finden Sie standardmäßig das Edelstein "Byebug" bei GemFile:

    group :development, :test do
      # Call 'byebug' anywhere in the code to stop execution and get a debugger console
      gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
    end

Dann können Sie Byebug auf Ihrem Controller verwenden, ihn überall hinstellen, wo immer Sie möchten, und oft funktionieren es wie ein "Haltepunkt" und führen schließlich Ihren Server $ Rails -Server aus

class UsersController < ApplicationController
   byebug
end

Verwenden Sie bei der Befehlszeile Hilfe für Optionen, normalerweise verwenden Sie Buchstaben 'C', um mit dem nächsten Haltepunkt oder dem Buchstaben 'n' fortzufahren, um Schritt für Schritt vorzuentwickeln, und Strg+d zum Beenden.

 (byebug) help

  break      -- Sets breakpoints in the source code
  catch      -- Handles exception catchpoints
  condition  -- Sets conditions on breakpoints
  continue   -- Runs until program ends, hits a breakpoint or reaches a line
  debug      -- Spawns a subdebugger
  delete     -- Deletes breakpoints
  disable    -- Disables breakpoints or displays
  display    -- Evaluates expressions every time the debugger stops
  down       -- Moves to a lower frame in the stack trace
  edit       -- Edits source files
  enable     -- Enables breakpoints or displays
  finish     -- Runs the program until frame returns
  frame      -- Moves to a frame in the call stack
  help       -- Helps you using byebug
  history    -- Shows byebug's history of commands
  info       -- Shows several informations about the program being debugged
  interrupt  -- Interrupts the program
  irb        -- Starts an IRB session
  kill       -- Sends a signal to the current process
  list       -- Lists lines of source code
  method     -- Shows methods of an object, class or module
  next       -- Runs one or more lines of code
  pry        -- Starts a Pry session
  quit       -- Exits byebug
  restart    -- Restarts the debugged program
  save       -- Saves current byebug session to a file
  set        -- Modifies byebug settings
  show       -- Shows byebug settings
  skip       -- Runs until the next breakpoint as long as it is different from the current one
  source     -- Restores a previously saved byebug session
  step       -- Steps into blocks or methods one or more times
  thread     -- Commands to manipulate threads
  tracevar   -- Enables tracing of a global variable
  undisplay  -- Stops displaying all or some expressions when program stops
  untracevar -- Stops tracing a global variable
  up         -- Moves to a higher frame in the stack trace
  var        -- Shows variables and its values
  where      -- Displays the backtrace

(byebug)

Eine weitere Option zum Anzeigen des Debugs (Params): In der App/Ansichten/Layouts/application.html.erb -Datei unter Render Fußzeile und oben setzen Sie die nächsten:

<%= debug(params) if Rails.env.development? %>

Schließlich teile ich diese Optionen, wie ich als Neuling in Ruby on Rails kenne. Hoffe das hilft.

Quelle einer Hilfe: https://rubyplus.com/articles/3631-debugging-using-byebug-ge-in-rails-5

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top