Ключевые технологии отслеживания цепочки вызовов Java (5) Получение стека вызовов

Java

1. Стек вызовов

Мониторинга цепочки вызовов недостаточно просто получить последовательность вызовов, как описано ранее:

В левой части отображается только порядок, а в правой — информация о порядке и стеке вызовов.

2. Получите стек вызовов

Метод получения стека вызовов в Java выглядит следующим образом:

Thread.currentThread().getStackTrace()

Пример кода:

public class Man {

	public static void main(String[] args) {
		Man man = new Man();
		man.getup();
		man.brushTeeth();
		man.eat();
	}

	public void getup() {
		System.out.println("getup");
	}

	public void brushTeeth() {
		System.out.println("brush teeth");
	}

	public void eat() {
		StackTraceElement[] elements = Thread.currentThread().getStackTrace();
		for (int i = 0; i < elements.length; i++) {
			StringBuffer buffer = new StringBuffer();
			buffer.append("index: ").append(i).append(" ClassName: ").append(elements[i].getClassName())
					.append(" Method Name : " + elements[i].getMethodName());
			System.out.println(buffer.toString());
		}
		System.out.println("eat");
	}
}

Выходной результат:

getup
brush teeth
index: 0 ClassName: java.lang.Thread Method Name : getStackTrace
index: 1 ClassName: com.javashizhan.demo.Man Method Name : eat
index: 2 ClassName: com.javashizhan.demo.Man Method Name : main
eat

Вы можете видеть, что третий стек — это метод, который вызывает функцию eat.

3. Вопросы, требующие внимания

Примечание в фактическом коде:

  1. Не обязательно, что третий стек является родительским методом текущего метода, например, в Spring будут вызываться другие родительские методы, и это число больше 3.
  2. Некоторые методы в процессе вызова могут вызываться циклически, что приводит к появлению нескольких методов с одним и тем же именем. Поэтому соответствующий родительский метод может быть неточно найден по имени класса и имени метода. Следует искать ближайший метод с таким же именем. по цепочке вызовов.

end.


Публичный аккаунт WeChat:


Присоединяйтесь к планете знаний «Практического лагеря Java Stack», участвуйте в обсуждениях и делитесь более полезными кодами. Разве это не вопрос нескольких фунтов яблок и нескольких славных реквизитов!

t.zsxq.com/RNzfi2j