I reproduced it with NetBeans 8.1 as well and filed a bug:
https://netbeans.org/bugzilla/show_bug.cgi?id=256771
Again, the workaround (to put bkpt in Java "eval" call and repeated F7)
works with NetBeans 8.1 as well.
Thanks,
-Sundar
On 11/25/2015 11:27 AM, Sundararajan Athijegannathan wrote:
Hi Dina,
I used NetBeans 8.0.2 and jdk 8 update 65 on Windows 7. I think I
managed to reproduce the issue you described.
Steps I used are as follows:
1) create a new NB project called "script_sample" with one Main.java
in it as source:
import javax.script.*;
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine e = m.getEngineByName("nashorn");
e.eval("load(\"" + args[0] + "\")");
System.out.println("press any key to continue..");
System.in.read();
e.eval("load(\"" + args[0] + "\")");
}
}
2) "clean and build" the NB project
3) create a simple script test.js with the following content (outside
the NB project)
print("in test.js script");
var x = 33;
x++;
print(x);
3) in a command line shell (I used cygwin), start the java process
with debugger server on - but not suspended at the start:
java -cp script_sample/dist/script_sample.jar
-agentlib:jdwp=server=y,suspend=n,transport=dt_socket Main test.js
The last command runs code up to the point of System.in.read call in
Main.java
4) In NetBeans, open the test script file "test.js" and set breakpoint
@ "print" call.
5) In NetBeans, use "Debug->Attach Debugger..." menu and specify the
socket port printed by step (3)
5) enter a value for System.in.read() in command line shell.
6) No breakpoint hit @ test.js
But, if step (3) was modified to suspend process at start for debugger
attach:
java -cp script_sample/dist/script_sample.jar
-agentlib:jdwp=server=y,suspend=y,transport=dt_socket Main test.js
The breakpoint in test.js enters (twice) once for each
"load("test.js")" call.
So, there seems to be a bug somewhere (in NetBeans?). That said, there
seems to be a simple workaround for this issue.
Within NB, set a breakpoint in Main.java (in addition to breakpoint in
test.js) at second eval call (line 10). breakpoint is hit in Main.java.
At that point, keep hitting "Step Into" (F7) menu. It eventually lands
in test.js -- and stops at the breakpoint in script!
Hope this helps,
-Sundar
On 11/24/2015 10:00 PM, Jim Laskey (Oracle) wrote:
Dian,
We’ll dive in for you, but the debugger expert (Sunder) will be
signing off soon. He’ll pick it up tomorrow.
Cheers,
- Jim
On Nov 24, 2015, at 12:03 PM, Dina Farbman
<dina.farb...@new-proimage.com> wrote:
Hi nashorn-dev,
I'm relatively new to Nashorn.
I work on a java 8 application that needs to run server side
javascript scripts using Nashorn. The java code runs the scripts at
certain points using nashorn's eval function, like this:
SimpleBindings simpleBinding= new SimpleBindings();
simpleBinding.put(....);
...
ScriptEngineManager factory = new ScriptEngineManager();
engine = factory.getEngineByName("nashorn");
engine.eval("load('"+scriptpath+"');", simpleBinding);
In addition, I need to provide a way to debug those scripts.
The only option I could find was using Netbeans debugger (remote
attach).
The scripts work fine.
The debugger, though, fails to stop at the breakpoints inside the
scripts in the following scenario:
1- Server started
2- The script is running once
3- Open Netbeans, attach remote debugger
4- Run script again
It will stop at the breakpoints inside the scripts in the following
scenario:
1- Server started
2- Open Netbeans, attach remote debugger
3- Run the script
So, what am I doing wrong?
What can cause such behavior?
Is there a reasonable workaround?
Thanks in advance,
Dina