gpt4 book ai didi

ruby - 如何检测 ruby​​ 中的变量更改/分配

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:22 27 4
gpt4 key购买 nike

我正在尝试用 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)

当我执行它时,我得到了;

n@VirtualBox:~$ ruby blah.rb 
line (eval):1
{:blah=>nil, :rar=>nil}
line (eval):2
{:blah=>4, :rar=>nil}
n@VirtualBox:~$

这不是我想要的 - 它没有显示对 rar 的分配。有一个更好的方法吗?作为一种技巧,我在 eval 中添加了最后一条语句。

eval("blah = 4\nrar = 3\nnil\n")

但这并不能解决循环等方面的问题。

我想得到一个变量在哪一行发生改变以及它按顺序改变了什么的输出。

最佳答案

我不知道纯 ruby​​ 中有什么机制可以帮助您编写调试器和 Hook 低级执行功能,例如变量分配。 ruby-debug 是一个 C 扩展,具有深入的知识并 Hook 到执行引擎。你可以read it here .

关于ruby - 如何检测 ruby​​ 中的变量更改/分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10069967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com