2
私はRubyでデバッガを作成しようとしています。私は、変数が変更されるたびにいくつかのコードを実行したい。私は変数を事前に知らない。rubyで変数の変更や割り当てを検出する方法
現時点では、私はset_trace_funcを試していますが、各行の後ではなく、各行の前に実行されているようです。
set_trace_func proc { |event, file, line, id, binding, classname|
if file == "(eval)"
printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
args = binding.eval("local_variables").inject({}) do |vars, name|
value = binding.eval name.to_s
vars[name] = value unless vars.nil?
vars
end
puts args.inspect
end
}
eval("blah = 4\nrar = 3\n")
set_trace_func(nil)
私はそれを実行します。
[email protected]:~$ ruby blah.rb
line (eval):1
{:blah=>nil, :rar=>nil}
line (eval):2
{:blah=>4, :rar=>nil}
[email protected]ualBox:~$
これは私が望むものではありません。これはrarへの割り当てを示していません。これを行うより良い方法はありますか?ハックとして、私はevalに最後の文を1つ追加しました。
eval("blah = 4\nrar = 3\nnil\n")
が、それはなど
ループに来るとき、それは私が上で変更変数とそれがためにに変更に並ぶものの出力を取得したいと思い、問題を解決しません。
お返事ありがとうございます。私の知識はちょっと古くなっていて、何か役に立つものがたくさんありました。 – Anko