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

How do you get the JavaScript stack trace from Nashorn?

我有一个脚本在 Chrome 中运行良好但在 Nashorn 上崩溃:

(Error: Namespace "com.cognitect.transit.util" already declared. in at line number 19664 at column number 6

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

  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());
}