Rhino Javascript - 如何为异常堆栈跟踪标记字符串源

Rhino Javascript - how to label a string source for exception stacktrace

我们使用 Rhino Javascript(JDK7 解释模式),在 ScriptEngine.eval(String) 和 java 脚本中大量使用 "eval" 使用 eval(细绳)。我们认识到 eval 可能存在安全问题...但除此之外...

当抛出异常时,它最终被 java 捕获,java 堆栈跟踪打印出如下内容: (#7) in at line number 7.

来源名称未知是有道理的,因为我们只是给它一个字符串来评估。

但是,有没有什么方法可以将标签附加到给定的评估,以便它在堆栈跟踪中提供更好的提示?类似于:

String jsCode = "va z=x+y".....
eval(jsCode, "label1");

因此,当抛出异常时,它会在第 7 行显示类似 : ( Label1) 的内容。

这将使调试和找到问题的根源变得更加容易。

在 JS eval 函数上创建简单包装器:

function evalWithLabel(js, label) {
    try {
        return eval(js);
    } catch(err) {
        throw label + ': ' + err;
    }
}