2012-03-28 4 views
5

Wenn ich den Ruby Debugger in Rails durchlaufe, wie kann ich ihn nur bei Code stoppen, den ich geschrieben habe, und den nativen Rails-Code überspringen?Ruby Debug: Skip Rails Code

(dh den gesamten Code Skipping, der so aussieht)

/Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.2.1/lib/active_support/core_ext/module/remove_method.rb:4 
remove_method(method) 
(rdb:1) s 
[76, 85] in /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.2.1/lib/active_support/core_ext/class/attribute.rb 
    76   def self.#{name}?() !!#{name} end 
    77 
    78   def self.#{name}=(val) 
    79   singleton_class.class_eval do 
    80    remove_possible_method(:#{name}) 
=> 81    define_method(:#{name}) { val } 
    82   end 
    83 
    84   if singleton_class? 
    85    class_eval do 
/Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.2.1/lib/active_support/core_ext/class/attribute.rb:81 
define_method(:#{name}) { val } 
(rdb:1) s 
[79, 88] in /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.2.1/lib/active_support/core_ext/class/attribute.rb 
    79   singleton_class.class_eval do 
    80    remove_possible_method(:#{name}) 
    81    define_method(:#{name}) { val } 
    82   end 
    83 
=> 84   if singleton_class? 
    85    class_eval do 
    86    remove_possible_method(:#{name}) 
    87    def #{name} 
    88     defined?(@#{name}) ? @#{name} : singleton_class.#{name} 

Dank!

Antwort

1

Ich denke, was Sie suchen ist etwas wie this, wenn ich Ihre Frage richtig verstehe. Sie werden lieber übertreten als hineinzugehen, wenn Sie eine Methode für Schienen verwenden, gehen Sie nicht in den Schienen-Code. Ich hoffe das hilft und viel Glück.

+0

Dies ist definitiv hilfreich, aber ich sehe nichts darin, dass ich den ganzen nativen Rails-Code überspringen kann, außer wenn ich einen Breakpoint am Anfang des ganzen Codes setze, den ich schreibe, und das ist sicherlich nicht ideal. .. –

1

Wenn Sie gelegentlich in einige Rails-Code trat nur press c in einer Konsole. Dadurch werden Sie zum nächsten gesetzten Haltepunkt bewegt (oder kehren zum gleichen Haltepunkt zurück, wenn Sie sich in einer Schleife befinden) oder beenden einfach die Seitenanforderung, wenn keine Haltepunkte mehr vorhanden sind.

+0

Dies ist, was ich jetzt tue, aber sagen Sie, wenn Sie den Code von einem Controller in Modellcode (sagen wir beim Speichern eines Objekts oder etwas) gehen wollen. Sie müssen einen Haltepunkt in Ihrem Controller-Code und auch in Ihrem Modellcode einfügen. Gibt es einen Weg, wenn Sie nicht wüssten, wo der Code hinführt (dh Sie wussten nicht, dass der Controllercode zum Modellcode führte), würde er einfach im Modellcode anhalten und den gesamten nativen Rails-Code überspringen? Ie a "weiter so, bis es Code trifft, den ich schrieb und dann dort breakpoint." –

+0

@ JonathanLeung Entschuldigung, ruby-debug kann nicht unterscheiden, wo "nativer" Code beginnt und wo er endet :) Es wäre sehr nicht-trivialer Code, um ein solches Problem zu lösen. Wenn du nicht zu Ruby-Debug gesagt hast: "Ich will hier aufhören, hier und hier", wird es bis zum Ende durch alle Methoden gehen. –

+1

@NashBridges Es könnte tatsächlich erreicht werden, indem der Benutzer einen Ordner zu einer übersprungenen Dateiliste hinzufügen kann, zum Beispiel '~/rvm/gems/ruby.2.0.0-p247/gems'. Es scheint nicht so schwierig und ich stimme zu, dass es nützlich wäre. – deivid

0

Es gibt drei Hauptdebugging-Befehle

  • c - Weiter
  • s - Schritt in
  • n - nächste/Step über

Was Sie suchen ist „n ", ermöglicht es Ihnen, eine Liste von Methoden zu durchlaufen, ohne in den Code oder das Ruby-Juwel zu gehen, das den Rest des Codes enthält.