我有一个脚本可以在Chrome中正常运行,但是在Nashorn上崩溃并显示以下脚本:



该错误不是很有用,因为该行包含:

  throw Error('Namespace "' + name + '" already declared.');

我需要从Nashorn获取完整的堆栈跟踪,我发现 NashornException.getScriptStackString ,但Nashorn生成的错误是javax.script.ScriptException类型的,当我调用NashornException.getScriptStackString时,它给了我一个空字符串。

如何从Nashorn获取JavaScript堆栈跟踪?

我不想用JavaScript来做,无论您运行什么JS代码,我都想用浏览器来做。我的很多JS代码都是第三方提供的,它是生成的,我无法修改我必须打印异常的数千个函数,以防万一。

最佳答案

NashornException可作为ScriptException的原因使用:

import jdk.nashorn.api.scripting.NashornException;

...

catch (ScriptException e) {
     if (e.getCause() instance of NashornException)
         String jsStackTrace = NashornException.getScriptStackString(e.getCause());
}

09-25 16:24