pry非常适合调试BasicObject的子类!
https://github.com/pry/pry说撬具有: “外来对象支持(BasicObject实例......”
但是怎么做? 可以预料的是,BasicObject不理解绑定。
NameError:
undefined local variable or method `binding' for #<C30Course:0xbefbc0c>
调用method_missing时,何处发送绑定?
答案 0 :(得分:10)
您需要直接在binding
上调用Kernel
方法,如下所示:
[13] pry(main)> class O < BasicObject
| def hi
| x = 10
| ::Kernel.binding.pry
| end
| end
=> nil
[14] pry(main)> O.new.hi
From: (pry) @ line 19 O#hi:
17: def hi
18: x = 10
=> 19: ::Kernel.binding.pry
20: end
[1] pry(unknown)> x
=> 10
[2] pry(unknown)> self
=> #<O:0x3fd5310d04f8>
答案 1 :(得分:2)
由于继承自BasicObject会给你一个Blank Slate
(所有pry实例方法也被删除),你将不得不更多地手动操作。例如:
require 'pry'
class Test < BasicObject
def test_method
a = 1+1
::Pry.send(:binding).pry
b = 2+2
end
end
o = Test.new
p o.test_method
输出(pry session打开):
☺ ruby hack.rb ruby-2.0.0-p0
From: .../quick_hacking/hack.rb @ line 5 Test#test_method:
3: def test_method
4: a = 1+1
=> 5: ::Pry.send(:binding).pry
6: b = 2+2
7: end