2012-03-28 140 views
5

在單步調試Rails中的Ruby調試器時,如何才能僅在我編寫的代碼中停止,跳過所有本機Rails代碼?Ruby調試:跳過導軌代碼

(即跳過所有看起來像這樣的代碼)

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

謝謝!

回答

1

我認爲如果我理解你的問題,你所尋找的就像this。 如果你使用rails的方法,你不會進入rails代碼,那麼你需要跨過而不是進入。我希望這個幫助能祝你好運。

+0

這絕對是有幫助的,但我沒有看到任何內容,這將允許我跳過所有的本地導軌代碼,除非我在我編寫的所有代碼的開始處放置了一個斷點,這當然並不理想。 .. – 2012-03-29 17:47:17

1

如果您偶爾加入一些Rails代碼,只需在控制檯中輸入press c即可。這會將你移動到你設置的下一個斷點(或者如果你在一個循環內返回到同一個斷點),或者如果沒有斷點,它將簡單地結束頁面請求。

+0

這就是我現在要做的,但是要說如果你想從一個控制器進入模型代碼(比如說保存一個對象或某物)時遵循一系列代碼。你將不得不在你的控制器代碼和你的模型代碼中放置一個斷點。有沒有辦法,如果你不知道代碼導致哪裏(即你不知道控制器代碼導致模型代碼),它會停止在模型代碼中,跳過所有的本地導軌代碼?即一個「繼續,直到它碰到我編寫的代碼,然後斷點。」 – 2012-03-29 17:50:09

+0

@JonathanLeung對不起,ruby-debug無法區分「native」代碼的開始位置和結束位置:)解決此問題將是非常不平凡的代碼。如果你還沒有說ruby-debug「我想在這裏和這裏停下來」,那麼它會經歷所有的方法鏈直到結束。 – 2012-03-29 18:38:28

+1

@NashBridges實際上可以通過啓用用戶將文件夾添加到跳過的文件列表來實現,例如'〜/ rvm/gems/ruby​​.2.0.0-p247/gems'。這似乎並不困難,我同意它會有用。 – deivid 2013-08-26 22:05:35

0

有3個主要的調試命令

  • Ç - 繼續
  • 秒 - 步入
  • n - 下/步跳過

什麼你要找的是「N 「,它可以讓你瀏覽一個方法列表,而不必進入包含代碼其餘部分的代碼或ruby gem。