Отладка Ruby: пропустить код Rails

Как сделать так, чтобы при прохождении отладчика Ruby в Rails он останавливался только на коде, который я написал, пропуская весь нативный код Rails?

(т.е. пропустить весь код, который выглядит так)

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

Спасибо!


person Jonathan Leung    schedule 28.03.2012    source источник


Ответы (3)


Я думаю, что вы ищете что-то вроде это, если я правильно понял ваш вопрос. Вы захотите перешагнуть, а не войти, таким образом, если вы используете метод для рельсов, вы не входите в код рельсов. Я надеюсь, что это поможет и удачи.

person Donavan White    schedule 28.03.2012
comment
Это определенно полезно, но я не вижу там ничего, что позволило бы мне пропустить весь нативный код рельсов, за исключением случаев, когда я ставлю точку останова в начале всего кода, который я пишу, и это, конечно, не идеально... - person Jonathan Leung; 29.03.2012

Если вы случайно зашли в код Rails, просто нажмите c в консоли. Это переместит вас к следующей установленной вами точке останова (или вернет к той же точке, если вы находитесь внутри цикла) или просто завершит запрос страницы, если точек останова не осталось.

person Nash Bridges    schedule 28.03.2012
comment
Это то, что я делаю сейчас, но скажем, если вы хотите проследить последовательность кода от контроллера, переходящего в код модели (скажем, при сохранении объекта или что-то в этом роде). Вам нужно будет поставить точку останова в коде вашего контроллера, а также в коде вашей модели. Есть ли способ, если бы вы не знали, куда ведет код (т.е. вы не знали, что код контроллера ведет к коду модели), он просто остановился бы в коде модели, пропустив весь нативный код рельсов? Т.е. продолжение, пока не столкнется с кодом, который я написал, а затем точка останова. - person Jonathan Leung; 29.03.2012
comment
@JonathanLeung Извините, ruby-debug не может отличить, где начинается собственный код и где он заканчивается :) Это был бы очень нетривиальный код для решения такой проблемы. Если вы не сказали ruby-debug, что я хочу остановиться здесь, здесь и здесь, он пройдет через всю цепочку методов до конца. - person Nash Bridges; 29.03.2012
comment
@NashBridges На самом деле этого можно было бы добиться, разрешив пользователю добавить папку в список пропущенных файлов, например, ~/rvm/gems/ruby.2.0.0-p247/gems. Это не кажется таким сложным, и я согласен, что это было бы полезно. - person deivid; 27.08.2013

Есть 3 основные команды отладки

  • в - Продолжить
  • с - шаг в
  • n - следующий/перешагнуть

То, что вы ищете, это «n», это позволяет вам пройти список методов, не заходя в код или ruby ​​gem, который содержит остальную часть кода.

person Ryan Taylor    schedule 05.11.2012