a question about what I can do with load()...
A. Sundararajan
sundararajan.athijegannathan at oracle.com
Wed May 13 05:30:46 UTC 2015
On Wednesday 13 May 2015 10:59 AM, A. Sundararajan wrote:
> Hi,
>
> You can debug "eval"-ed code in NetBeans.
>
> Steps:
>
> 1) put a breakpoint on the ScriptEngine.eval() call
> 2) do "step into" (F7) - goes into JDK's javax.script.* internal code
> 3) do another "step into" (F7 again) - you're right at the start of
> your eval'ed JS code!
> 4) you can now put breakpoints on that 'eval' code JS window
> [eval_window.png]
>
> See also:
> https://blogs.oracle.com/geertjan/entry/youtube_debugger_for_jdk8_s
>
> Hope this helps,
> -Sundar
>
>
> On Tuesday 12 May 2015 11:36 PM, BURRIS Thomas wrote:
>> As usual, I have a much higher-level question than usually appears on
>> this list! Please direct me elsewhere if there's a more appropriate
>> forum....
>>
>> As far as I can tell, in order to use Netbeans JS debugger with JS
>> code that uses Nashorn I have to use "load" in the eval of my JS.
>> Load apparently does something to preserve the distinct lines in the
>> JS, which enables the setting of breakpoints, etc. Simply using
>> engine.eval(string-of-code) or engine.eval(Reader) means you can't
>> use the debugger.
>>
>> However, I am writing a platform on which I enable developers to
>> write their JS code and, like for node.js, etc., I wrap their code
>> invisibly to make it into a module. That is, I add something along
>> the lines of
>>
>> (function() { var exports = {}; <<<< this
>> <user's code>
>> })(); <<<< and this
>>
>> to "modularize" the user's code. So if I want to both "wrap" my
>> user's code and enable them to use the Netbeans debugger, I'm stuck
>> because I either a) read the JS from its file as a string, wrap it,
>> and then load it; or b) load it as a file (in which case I don't get
>> the chance to "wrap" it). Here are the two cases:
>> a)
>> String code =
>> getMyJavascriptAsAString("c/somedir/some.js");
>> code = wrapMyJsCode(code);
>> engine.eval("load({ script: '" + code + "', name: \"some.js\"})");
>>
>> ERROR: Problem loading: somedir/some.js':
>> javax.script.ScriptException: <eval>:1:55 Missing close quote
>> load({ script: 'var x = {};
>> ^ in <eval> at line number 1 at column
>> number 13
>>
>> FAILS because the JS code consists of multiple lines and java doesn't
>> support multi-line strings.
>>
>> b)
>> Loading from a file directly
>>
>> engine.eval("load('c:/somedir/some.js');");
>>
>> which works in a debugger, but doesn't enable me to "wrap" user's code.
>>
>> Aside from writing out temporary files, does somebody have a better
>> suggestion? Is it possible to intercept the handling of
>> "load(<filePath>)" so that I can inject stuff into the user's code to
>> "modularize" it?
>>
>> I hope I'm clear.
>>
>> thanks
>>
>> This email and any attachments are intended solely for the use of the
>> individual or entity to whom it is addressed and may be confidential
>> and/or privileged.
>>
>> If you are not one of the named recipients or have received this
>> email in error,
>>
>> (i) you should not read, disclose, or copy it,
>>
>> (ii) please notify sender of your receipt by reply email and delete
>> this email and all attachments,
>>
>> (iii) Dassault Systemes does not accept or assume any liability or
>> responsibility for any use of or reliance on this email.
>>
>> For other languages, go to http://www.3ds.com/terms/email-disclaimer
>
More information about the nashorn-dev
mailing list