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

3

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

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

该错误信息并不是很有用,因为该行包含如下内容:

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

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

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

我不想从JavaScript中获取,我想以与浏览器相同的方式获取,无论您运行什么JS代码。我的许多JS代码都是第三方生成的,我不能修改成千上万个函数以打印异常。


JavaScript错误在创建时生成它们的堆栈跟踪。您可以简单地用try/catch语句包围您的代码,然后无论在哪里捕获它,都可以读取堆栈。 - Benjamin Gruenbaum
@BenjaminGruenbaum 你是在指 JavaScript 中的 try/catch 吗? - pupeno
1个回答

7
NashornExceptionScriptException的原因之一,可作为其异常信息:
import jdk.nashorn.api.scripting.NashornException;

...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接