Debugging IntelliJ Nashorn调试和评估JO对象时出错

Debugging IntelliJ Nashorn调试和评估JO对象时出错,debugging,intellij-idea,nashorn,Debugging,Intellij Idea,Nashorn,在调试Nashorn解释器中运行的某些JavaScript(在2016.3.4版中运行)时,我可以看到一些变量正确显示为JavaScript对象,可以在“计算表达式”窗口中进行计算,而其他变量显示为JO对象。无法计算显示为JO对象的对象,因为这会导致NativeReferenceError异常 如何将JO对象视为JavaScript变量并对其求值 事实证明,解决这个问题非常容易。只需要在Java类中捕获JavaScript变量,以便在Evaluate Expression窗口中引用它们。像这样的

在调试Nashorn解释器中运行的某些JavaScript(在2016.3.4版中运行)时,我可以看到一些变量正确显示为JavaScript对象,可以在“计算表达式”窗口中进行计算,而其他变量显示为JO对象。无法计算显示为JO对象的对象,因为这会导致NativeReferenceError异常

如何将JO对象视为JavaScript变量并对其求值


事实证明,解决这个问题非常容易。只需要在Java类中捕获JavaScript变量,以便在Evaluate Expression窗口中引用它们。像这样的类可以完成以下任务:

package foo;

import jdk.nashorn.api.scripting.ScriptObjectMirror;

public class NashornCapture {
    private static Object[] args;
    private static ScriptObjectMirror arg;

    public static void capture(Object... vars) {
        args = vars;
    }

    public static void capture(ScriptObjectMirror vars) {
        arg = vars;
    }

    public static Object arg(int index) {
        return args[index];
    }

    public static Object arg(String name) {
        return arg.get(name);
    }
}
然后可以通过索引或名称引用变量,如下图所示