【问题标题】:Nashorn Javascript debugging with CompiledScript?使用 CompiledScript 进行 Nashorn Javascript 调试?
【发布时间】:2016-10-06 15:32:41
【问题描述】:

当想要在 IDE 中同时调试 Java 和 Javascript 时,似乎必须使用 load(filename) Nashorn extension,参见例如Debugging Nashorn JavaScript with Intellij

不幸的是,这禁止使用CompiledScript,因为上面返回一个ScriptObjectMirror 对象,并且至少没有记录compile(filename) Nashorn 扩展。

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

【问题讨论】:

  • 另见 github.com/aperto/sourceurl-resourcefilter 的 Maven 资源过滤器,它将自动将 //@ sourceURL= 注释添加到 JS 源文件。这将导致文件名显示在 Netbeans 调试器的 Nashorn JS 堆栈帧中,即使不使用 load(),例如CompiledScript.

标签: nashorn


【解决方案1】:

您可以使用 IDE 调试任何 Nashorn/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

【讨论】:

  • Thx,但是设置断点不是我的问题,因为我已经可以将它放在我的案例中抛出的 Java 异常中。我正在寻找的是与 .js 源代码行相对应的堆栈帧,并且在选择这些堆栈帧时会显示 .js 源代码。否则我不知道我在看什么变量:)
  • 好吧,当断点命中时,NetBeans 会显示源代码(即使是从字符串“eval”)。并且堆栈跟踪中的堆栈帧必须使用人工名称 - 因为用户没有关联名称。那里没有什么可以做的。但是,Nashorn 实现了 @sourceURL / #sourceURL 指令。 (bugs.openjdk.java.net/browse/JDK-8032068)。这对于为评估过的源关联一个可读的名称很有用。
  • NetBeans 是我接下来要尝试的东西,就像IDEA has a bug when debugging maven dependencies。您是否有机会知道 NetBeans 是否也会在 CompiledScript 调用中显示源代码,即不使用 load()
  • OK NetBeans 调试工作完美,CompiledScript 也是如此(只要存在// @ sourceURL =... 注释)。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-11-21
  • 2018-06-13
  • 2014-06-19
  • 2016-10-29
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多