8

pry は、 BasicObject のサブクラスをデバッグするのに最適です!

https://github.com/pry/pryは、pry には次の機能があると述べています。「エキゾチック オブジェクトのサポート (BasicObject インスタンス...」

しかし、それを行う方法は?当然のことながら、BasicObject はバインディングを理解していません。

 NameError:
   undefined local variable or method `binding' for #<C30Course:0xbefbc0c>

method_missing が呼び出されたとき、どこにバインディングを送信しますか?

4

2 に答える 2

11

次のように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>
于 2013-04-14T23:38:24.100 に答える
3

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 セッションが開かれました):

☺  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
于 2013-04-14T23:14:01.910 に答える