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

时间:2015-09-11 18:07:02

标签: javascript java nashorn scriptengine

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

  

(错误:名称空间“com.cognitect.transit.util”已在第6栏第19664行声明。

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

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

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

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

我不想从JavaScript中做到这一点,无论你运行什么JS代码,我都希望以与浏览器相同的方式完成它。很多我的JS代码都是第三方,它是生成的,我不能修改我打印异常的数千个函数以防万一。

1 个答案:

答案 0 :(得分:6)

NashornException的原因可以ScriptException

import jdk.nashorn.api.scripting.NashornException;

...

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