Ruby调试:跳过Rails代码

5

当在Rails中进行Ruby调试器的步进时,我该如何让它只在我编写的代码处停止,跳过所有本地的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}

谢谢!

3个回答

1

我认为你要找的是类似于this这样的东西,如果我理解你的问题正确的话。 你应该跨过而不是进入,这样如果你正在使用Rails的方法,你就不会进入Rails的代码。希望这可以帮到你,祝你好运。


这肯定有帮助,但我没看到任何东西可以让我跳过所有本地的Rails代码,除非我在写的所有代码开头放置一个断点,这显然不是理想的... - Jonathan Leung

1
如果你偶尔涉足Rails代码,只需在控制台中按下c。这将使您移动到下一个已设置的断点(或者如果您在循环内部,则返回相同的断点),或者如果没有剩余的断点,则简单地结束页面请求。

这是我现在所做的,但是如果你想跟踪从控制器进入模型代码的代码流程(比如在保存对象时),你必须在控制器代码和模型代码中都设置断点。如果你不知道代码的流向(即你不知道控制器代码导致了模型代码),有没有一种方法可以直接停在模型代码中,跳过所有本地的Rails代码?也就是说,“继续执行,直到它遇到我编写的代码,然后在那里设置断点。” - Jonathan Leung
@JonathanLeung 抱歉,ruby-debug无法区分“本地”代码的起点和终点 :) 解决这个问题需要非常复杂的代码。如果您没有告诉ruby-debug“我想在这里、这里和这里停下来”,它将一直执行整个方法链直到结束。 - Nash Bridges
1
@NashBridges 实际上可以通过允许用户将文件夹添加到跳过文件列表中来实现,例如 ~/rvm/gems/ruby.2.0.0-p247/gems。这似乎并不困难,我同意这将是有用的。 - deivid

0

有三个主要的调试命令

  • c - 继续执行
  • s - 进入步骤
  • n - 下一步/跳过

你需要的是“n”,它允许你在不进入代码或包含其余代码的ruby gem的情况下浏览方法列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接