Как проследить поток Java из метода в метод с использованием Java - PullRequest
0 голосов
/ 06 мая 2019

Я хочу отслеживать поток Java всякий раз, когда происходит исключение.Я имею в виду, как Рассмотрим

Метод1 -> Метод2 -> Метод3 -> Метод4 -> Ошибка, возникшая в методе 4 при обработке аргумента1, скажем, мы находим его недействительным.

Тогда мы могли бы иметьЭлемент ответа, который выглядит следующим образом:

«DebugInfo»: «Method1 | Method2 | Method3 | Method4 - Ошибка, возникшая в методе 4 при обработке аргумента1.Это недопустимо, потому что пункт назначения не поддерживает HAL ”

1 Ответ

2 голосов
/ 06 мая 2019

Это именно то, что происходит, используя метод getStackTrace :

Обеспечивает программный доступ к информации трассировки стека, напечатанной printStackTrace (). Возвращает массив элементов трассировки стека, каждый из которых представляет один кадр стека. Нулевой элемент массива (при условии, что длина массива не равна нулю) представляет вершину стека, что является последним вызовом метода в последовательности . Как правило, это точка, в которой этот бросаемый объект был создан и брошен. Последний элемент массива (при условии, что длина массива не равна нулю) представляет основание стека, которое является первым вызовом метода в последовательности.

Обратите внимание, что порядок, в котором вы нуждаетесь, абсолютно противоположен (см. Жирную часть)

Так что вы можете сделать что-то вроде

StackTraceElement[] elements = exception.getStackTrace();
for (int i = elements.length() - 1; i >= 0; i--) {
   System.out.println(elements[i].getMethodName());
}

Вам нужно только добавить несколько шаблонов, чтобы получить именно то, что вам нужно.

Обратите внимание, что печати (или экспорта) только имени метода недостаточно, поскольку обычно у вас есть стек, перемещающийся по разным классам, поэтому лучше распечатать имя класса и имя метода. Но для более крупных методов полезно также знать, в какой строке это произошло, так что ... почему бы не использовать простой exception.printStackTrace(), который делает именно то, что вам нужно?

...