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. Вопросы, требующие внимания
Примечание в фактическом коде:
- Не обязательно, что третий стек является родительским методом текущего метода, например, в Spring будут вызываться другие родительские методы, и это число больше 3.
- Некоторые методы в процессе вызова могут вызываться циклически, что приводит к появлению нескольких методов с одним и тем же именем. Поэтому соответствующий родительский метод может быть неточно найден по имени класса и имени метода. Следует искать ближайший метод с таким же именем. по цепочке вызовов.
end.
Публичный аккаунт WeChat:
Присоединяйтесь к планете знаний «Практического лагеря Java Stack», участвуйте в обсуждениях и делитесь более полезными кодами. Разве это не вопрос нескольких фунтов яблок и нескольких славных реквизитов!