From: Robert Klemme Date: 2010-02-24T17:19:21+09:00 Subject: Re: Trace local variable 2010/2/23 Onionwushu Onionwushu : > I've searched a lot to get an answer but I can't figured it out. I wish > to trace local variables in a method. Here is an example: > > def test >  a = 1 >  b = 2 > end > > Returns: > Variable a gets the value 1 in test > Variable b gets the value 2 in test > > So, I'd like this output without adding some extra stuff in my method > test. I need a callback or thing like that but I can't find it. > > I'm aware of the built-in method trace_var, but unfortunately, it's all > about global variables. So, I successed to trace attribute calls, > because it is possible to define methods like this: > > def attribute=(value) >  ... > end > > I also successed to trace method calls. > > I've seen function like set_trace_func but it's not really convenient to > deal with my particular problem. And it isn't possible to redefine the > assignment operator = on its own. > > Any ideas to trace local variables ? I don't think there is an easy way with MRI and standard tools. You could debug the code of course. Other than that, these are things that I can imagine to work: - patch interpreter to generate output for variable access - use set_trace_func along with a parsed version of the source (e.g. ParseTree) - patch interpreter even more to allow for a similar mechanism like set_trace_func (aka "set_trace_local"). Btw, why do you need that feature? If your methods are so complex that you need tracing of individual variables maybe your methods are too long. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/