2010/2/23 Onionwushu Onionwushu <loic.lehenaff / gmail.com>:
> 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
> =A0a =3D 1
> =A0b =3D 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=3D(value)
> =A0...
> 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 =3D 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. ParseT=
ree)
- 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

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/