Forum: JRuby Creating Variables in Java Affects Trace Behavior

Posted by Bart Trzy (trzy)
on 2012-04-13 21:18
Hi,

I've discovered that defining variables through Java results in
unexpected side effects when tracing using the EventHook. If, after
creating a JRuby runtime, I do this:

Map vars = jRubyContainer.getVarMap();
vars.put("$Applet", applet);

And then I install the EventHook, I notice that it often runs off into
what presumably are internal JRuby methods. For example, if only
intercepting "line" events, the following Ruby code:

1.def foo(x)
2. x
3.end
4.foo(1)
5.

Normally produces this trace sequence:

1, 4, 2, 5

After adding the vars.put() call, it will go from line 1 to line '123',
which appears to be a method named 'method_add'. 'foo' will also be
visible as a variable of type 'Symbol' when before, it was not a
variable at all.

Any thoughts on what might be causing this behavior? I've looked at
BiVariableMap and I don't see anything unusual there... I presume the
problem (if it a problem at all and not just a misunderstanding on my
part) is actually deeper in the interpreter logic itself.

Thanks!

EDIT: Upon closer inspection, it appears that what is really happening
is that the event handler is being called for JRuby "core" code. I
notice that jruby-debug explicitly tests for this and skips over it. I
can apply the same fix by testing for file=="<script>" (I do not set a
script name) but it would be interesting to find out why the use of
BiVariableMap.put() triggers this behavior. Is this intentional?
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.