Прежде всего, чтобы получить хорошую трассировку стека, вы должны быть очень осторожны при оценке сценариев в своей области видимости.Я видел, что многие разработчики упускают это из виду, когда они всегда отправляют одни и те же параметры для 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();
}
}
}