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

如何从Nashorn获得JavaScript堆栈跟踪?,javascript,java,nashorn,scriptengine,Javascript,Java,Nashorn,Scriptengine,我有一个脚本,在Chrome上运行良好,但在Nashorn上崩溃: (错误:命名空间“com.cognitect.transit.util”已在第6列的第19664行声明 该错误不是很有用,因为该行包含: throw Error('Namespace "' + name + '" already declared.'); 我需要从Nashorn获取完整的堆栈跟踪,我发现Nashorn生成的错误类型为javax.script.ScriptException,当我调用NashornExcept

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

(错误:命名空间“com.cognitect.transit.util”已在第6列的第19664行声明

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

  throw Error('Namespace "' + name + '" already declared.');
我需要从Nashorn获取完整的堆栈跟踪,我发现Nashorn生成的错误类型为
javax.script.ScriptException
,当我调用
NashornException.getScriptStackString
时,它会给我一个空字符串

如何从Nashorn获取JavaScript堆栈跟踪


我不想用JavaScript来做,我想用浏览器做的方式来做,不管你在运行什么JS代码。我的很多JS代码都是第三方的,它是生成的,我不能修改成千上万的函数,我必须打印异常以防万一。

NashornException可以作为
脚本的原因例外情况

import jdk.nashorn.api.scripting.NashornException;

...

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

JavaScript错误在创建时会生成堆栈跟踪。您可以简单地用
try/catch
子句包围代码,然后读取堆栈,无论在何处捕获它。@BenjaminGruenbaum您指的是JavaScript中的try/catch吗?