2
나는 루비에서 디버거를 작성하려고합니다. 변수가 바뀔 때마다 코드를 실행하고 싶습니다. 변수를 미리 알지 못합니다.루비에서 변수 변경/할당을 감지하는 방법
현재 나는 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