当在 pry 调试会话期间,我想检查FooClass.new.foo我会在 pry 控制台中执行此操作的分步执行时
$ FooClass.new.foo #this gives me path and line of the method
break /path/to/foo_class.rb:LINE_WHERE_FOO_IS_DEFINED
FooClass.new.foo
Run Code Online (Sandbox Code Playgroud)
这有效,但我需要查找路径、行,它会留下一个断点,我有时必须删除。
有一个更快的方法:
break FooClass#foo
FooClass.new.foo
Run Code Online (Sandbox Code Playgroud)
但还是两步,断点还在。
有没有办法在一个命令中做到这一点,比如
step-into FooClass.new.foo
Run Code Online (Sandbox Code Playgroud)
这将启动一个 Pry 子会话,进入方法执行,在它退出/完成后,我又回到了原始会话中,没有多余的断点了?
换句话说:我正在调试中,并且在之前看到了一个名为几行的方法(我无法立即进入它)。我不想把 abinding.pry放在源代码中(再次启动调试会话可能需要很多时间)。
小智 2
问题隐藏着复杂性。例如,您可以做的一件事是:
pry Foo.new.foo
or
Foo.new.foo.pry
Run Code Online (Sandbox Code Playgroud)
这使您绑定到function 的返回值foo,但这不是您想要的。它还表明,当您的代码Foo.new.foo行运行时,函数要知道到底要绑定什么,这是很复杂的。
这就是我真正感受到的问题;需要理解该行的表达式才能了解在哪里放置断点。如果你想象它像函数一样工作step。
如果你的代码Foo.new.foo已经是一个断点(例如,你有一个包含该代码的函数,并且你在这样的行上放置了一个断点),那么你输入step,你会进入Foo.new Foo.initialize instance of foo foo.foo等等。因此,任何尝试执行您希望执行的操作的代码都很难理解表达式树中的何处停止并将您的代码放入pry.
这就是为什么您必须告诉在这种情况下pry在哪里停止使用break。
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |