2016-10-06 31 views
0

当想要在IDE中调试Java和Javascript时,似乎必须使用load(filename)Nashorn extension,请参阅Debugging Nashorn JavaScript with IntellijNashorn Javascript使用CompiledScript进行调试?

不幸的是,这禁止使用CompiledScript,作为上述返回一个ScriptObjectMirror对象,至少没有compile(filename)犀牛扩展记录。

这里丢失的CompiledScript功能之一是例如CompiledScript.eval(ScriptContext context)。我找不到使用ScriptObjectMirror实现相同的方法。另外,load(filename)将立即执行脚本,这可能不是想要的。

+0

也https://github.com/aperto/sourceurl-resourcefilter见一个Maven资源过滤器,它会自动加上'// @ sourceURL ='注释JS源文件。这将导致文件名在Netbeans调试器中显示在Nashorn JS stackframes中,即使没有使用'load()',例如。与'CompiledScript'。 – jfrantzius

回答

1

可以调试任何犀牛/ JavaScript的使用这个集成开发环境 - >

https://blogs.oracle.com/sundararajan/entry/remote_debugging_of_nashorn_scripts

  • 在脚本中引入 “调试” 语句
  • 用你的IDE中jdk.nashorn插入断点。 internal.runtime.ScriptRuntime.DEBUGGER方法
  • 在您的IDE中启动“调试”

另请参见IntelliJ:https://stackoverflow.com/a/38513981/3189360

随着最近的NetBeans构建,不需要第二部分。 NetBeans将自动分解为任何“调试器”语句。

https://twitter.com/sundararajan_a/status/773375676103602178

+0

Thx,但设置一个中断点并不是我的问题,因为我已经可以将它放入正在抛出的Java异常中。 我正在寻找的是与.js源代码行相对应的堆栈帧,选择这些堆栈帧时会显示.js源代码。否则,我不知道我在看什么变量:) – jfrantzius

+0

那么,NetBeans显示源(即使当从该字符串中“eval”)时,该断点命中。堆栈跟踪中的堆栈帧必须使用虚假名称 - 因为没有用户关联的名称。那里可以做的不多。但是,Nashorn实现@sourceURL/#sourceURL指令。 (https://bugs.openjdk.java.net/browse/JDK-8032068)。将一个可读名称与已评估的源相关联很有用。 –

+0

NetBeans是我将尝试的下一件事,因为[IDEA在调试Maven依赖项时存在一个错误](https://youtrack.jetbrains.com/issue/IDEA-162333)。您是否有机会知道NetBeans是否也会在CompiledScript调用中显示源代码,即不使用'load()'? – jfrantzius