2012-03-28 16 views
5

Podczas przechodzenia przez Ruby Debugger w Railsach, w jaki sposób mam go zatrzymywać tylko przy kodzie, który napisałem, pomijając wszystkie natywne kody Railsowe?Debugowanie Ruby: Pomiń kod Railsów

(tj omijając cały kod, który wygląda tak)

/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} 

Dzięki!

Odpowiedz

1

Myślę, że to, czego szukasz, to coś w rodzaju this, jeśli dobrze rozumiem twoje pytanie. Będziesz chciał przejść krok naprzód, zamiast wkraczać, w ten sposób, jeśli używasz metody szyny, nie wchodzisz w kod szyn. Mam nadzieję, że to pomoże i powodzenia.

+0

Jest to zdecydowanie pomocne, ale nie widzę niczego, co pozwoli mi pominąć cały kod rodzimego szyny, chyba że umieściłbym punkt przerwania na początku całego kodu, który piszę, a to z pewnością nie jest idealne. .. –

1

Jeśli od czasu do czasu wprowadzono kod Railsowy, wystarczy press c w konsoli. Spowoduje to przejście do następnego punktu przerwania, który ustawiłeś (lub powrócisz do tego samego, jeśli znajdujesz się w pętli) lub po prostu zakończysz żądanie strony, jeśli nie ma już punktów przerwania.

+0

To jest to, co teraz robię, ale powiedz, jeśli chcesz podążać za tokiem kodu ze sterownika wchodzącego w kod modelu (powiedzmy przy zapisywaniu obiektu lub czegoś). Będziesz musiał umieścić punkt przerwania w kodzie kontrolera, a także w kodzie modelu. Czy istnieje sposób, jeśli nie wiesz, dokąd doprowadził kod (tj. Nie wiesz, że kod kontrolera doprowadził do kodu modelu), po prostu zatrzymałby się w kodzie modelu, pomijając kod rodzimego szyny? Np. "Kontynuuj, dopóki nie dotrze do kodu, który napisałem, a następnie złamam tam". –

+0

@ JonathanLeung Przykro nam, ruby-debug nie może odróżnić, gdzie zaczyna się "natywny" kod i gdzie się kończy :) Byłby to bardzo nietrywialny kod do rozwiązania tego problemu. Jeśli nie powiedzieliście na ruby-debug "Chcę zatrzymać się tutaj, tutaj i tutaj", przejdzie on przez cały łańcuch metod aż do końca. –

+1

@NashBridges Właściwie można to osiągnąć, umożliwiając użytkownikowi dodanie folderu do listy pominiętych plików, na przykład '~/rvm/gems/ruby.2.0.0-p247/gems'. Nie wydaje się to trudne i zgadzam się, że byłoby to przydatne. – deivid

0

Istnieje Polecenia 3 główną debugowanie

  • c - Kontynuuj
  • S - Wkrocz
  • n - następny/Krok nad

Co szukasz jest „n ", pozwala ci przejrzeć listę metod bez wchodzenia do kodu lub ruby ​​gem, który zawiera resztę kodu.