在 Rhino 中获取异常的堆栈跟踪
Get the stack trace of exception in Rhino
我们有一个允许输入脚本的应用程序。这些脚本可以在多个文件中,所以当出现异常时,我们希望能够向应用程序管理员显示堆栈跟踪,以便他可以诊断问题。
有没有办法从 Rhino 异常中提取堆栈跟踪?
首先,为了获得良好的堆栈跟踪,在评估范围内的脚本时需要非常小心。我已经看到许多开发人员忽略了这一点,他们总是为 sourceName
和 lineno
发送相同的参数,例如:
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();
}
}
}
我们有一个允许输入脚本的应用程序。这些脚本可以在多个文件中,所以当出现异常时,我们希望能够向应用程序管理员显示堆栈跟踪,以便他可以诊断问题。
有没有办法从 Rhino 异常中提取堆栈跟踪?
首先,为了获得良好的堆栈跟踪,在评估范围内的脚本时需要非常小心。我已经看到许多开发人员忽略了这一点,他们总是为 sourceName
和 lineno
发送相同的参数,例如:
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();
}
}
}