Я пытаюсь написать отладчик в рубине. Я хочу запускать некоторый код каждый раз, когда изменяется переменная. Я не знаю переменные заранее.Как обнаружить переменные изменения/присвоения в 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]:~$
Это не то, что я хочу - это не показывает назначение для rar. Есть лучший способ сделать это? В качестве взлома я добавил последнее утверждение к eval, например.
eval("blah = 4\nrar = 3\nnil\n")
но это не решает проблему, когда дело доходит до петли и т.д.
Я хотел бы получить выход какой линии переменной изменилось, и что изменилось в порядке.
Благодарим за отзыв. Мои знания немного устарели, и у меня много проблем с получением чего-то полезного. – Anko