在 Rhino 中获取异常的堆栈跟踪

Get the stack trace of exception in Rhino

我们有一个允许输入脚本的应用程序。这些脚本可以在多个文件中,所以当出现异常时,我们希望能够向应用程序管理员显示堆栈跟踪,以便他可以诊断问题。

有没有办法从 Rhino 异常中提取堆栈跟踪?

首先,为了获得良好的堆栈跟踪,在评估范围内的脚本时需要非常小心。我已经看到许多开发人员忽略了这一点,他们总是为 sourceNamelineno 发送相同的参数,例如:

ctx.evaluateString(scriptScope, script, "script", 0, null);

因此,在第 3 和第 4 个参数中,您必须发送有助于开发人员识别脚本的文件名。然后,行号应该是正确的,以防您连接脚本。

因此,一旦您正确评估了上下文中的所有脚本,您就可以获得有用的堆栈跟踪。所以只需捕获异常并处理堆栈跟踪中的信息:

try {
  // execute script
} catch (RhinoException re) {
  StackTraceElement[] stackTrace = re.getStackTrace();
  if (stackTrace != null) {
    for (StackTraceElement stackElement : stackTrace) {
      // stackElement.getFileName();
      // stackElement.getLineNumber();
    }
  }
}