Трассировка вызовов в Java

Вы можете сделать что-то вроде этого:

uniqueCount = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
var map = new Object();

for(var i = 0; i < uniqueCount.length; i++) {
 if(map[uniqueCount[i]] != null) {
    map[uniqueCount[i]] += 1;
} else {
    map[uniqueCount[i]] = 1;
    }
}

теперь у вас есть карта со всеми значениями символов

16
задан JavaRocky 22 June 2009 в 06:13
поделиться

5 ответов

Думаю, вам это может показаться интересным. Это java-агент, который добавляет к методам ведение журнала входа и выхода, используя структуру slf4j для фактического ведения журнала вывода. Затем необходимо настроить структуру ведения журнала, чтобы распечатать только тот поток, который вас интересует.

http://www.slf4j.org/extensions.html#javaagent

(для ясности: 1) Написал, 2) у меня работает :))

13
ответ дан 30 November 2019 в 17:05
поделиться

При использовании IntelliJ существует сменный названный Flameviewer. Найдите больше деталей о ссылке ниже,

https://github.com/kornilova-l/FlameViewer#uploading-file-to-flameviewer

0
ответ дан 30 November 2019 в 17:05
поделиться

По сути, вам нужно аспектно-ориентированное программирование некоторой формы, где аспект может определять, предназначен ли текущий поток для регистрации вызовов. (Альтернативой является явное занесение журнала в каждый метод самостоятельно, что было бы болезненно.)

В Java существует множество фреймворков АОП, таких как AspectJ и Spring ( Конечно, Spring - это намного больше, чем АОП).

Применение аспектов к каждому вызову метода в системе может быть непростым делом ... У меня нет опыта работы с AspectJ, но Spring AOP - это в основном предназначен для включения АОП вокруг компонентов. Классы, которые фактически неизвестны Spring, не могут быть легко изменены. Имейте в виду, я давно не использовал даже Spring AOP - с тех пор, возможно, что-то получилось :)

2
ответ дан 30 November 2019 в 17:05
поделиться

Мы могли бы создать новый объект Throwable, который будет иметь трассировку вызовов. И, используя некоторые строковые манипуляции, мы можем получить стек вызовов.

Throwable t = new Throwable();
System.out.println(t.getStackTrace()[1].toString());

Я не уверен, что получение информации таким образом является хорошей практикой или нет. :)

2
ответ дан 30 November 2019 в 17:05
поделиться

Runtime.traceMethodCalls () , который выводит строку для каждого вызова метода всех объектов во всех потоках

1
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: