библиотека трассировки времени выполнения Java для замены system.out.println - PullRequest
0 голосов
/ 30 декабря 2010

Вы слышали о какой-либо библиотеке, которая позволила бы мне настроить трассировку для определенных методов во время выполнения?

Вместо добавления (и удаления) большого количества System.out.println в моем коде(и необходимость повторной компиляции и повторного развертывания) Я хотел бы иметь волшебную вещь, которая будет печатать строку для каждого вызова выбранного метода без каких-либо изменений в коде.Это будет работать без перекомпиляции, так что нужен какой-то агент JVM (или какой-то нестандартный JVM?).Похоже на работу по аспектному программированию?

Типичным сценарием будет запуск приложения, динамическая настройка отслеживаемых методов (в отдельном файле или аналогичном), а затем каждый раз, когда выбранный метод вызывается строкой со своим именем(и аргументы) распечатывается в System.out (или некоторый файл журнала).

Естественно, можно подумать о десятках дополнительных функций, но этот базовый набор будет отличным инструментом.Кстати, я тоже использую интерактивный отладчик Eclipse, не только технику трассировки System.out, но обе имеют некоторые преимущества, и иногда Eclipse недостаточно.

Ответы [ 6 ]

4 голосов
/ 30 декабря 2010

Да, то, что вы имеете в виду, называется аспектно-ориентированным программированием. Типичная библиотека, обеспечивающая это для Java, - AspectJ. Вы определяете то, что называется pointcuts, по существу регулярными выражениями для классов и имен методов, включая подстановочные знаки, и код, который должен выполняться в каждом pointcut, известный как совет. Это полезно для регистрации, а также проверок безопасности и аналогичных сквозных проблем.

Вы можете включать и выключать советы pointcut через настройку. Вы можете выполнить рекомендацию до вызова метода, после его возврата или даже после того, как он выдает исключение. Аргументы также доступны.

Для работы необходим java-агент aspectj.

1 голос
/ 19 июня 2011

Вы можете сделать это, используя инструмент под названием InTrace .

ПРИМЕЧАНИЕ. InTrace - это бесплатный инструмент с открытым исходным кодом, который я написал.

1 голос
/ 30 декабря 2010

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

0 голосов
/ 05 сентября 2016

Jackplay - инструмент, который вы ищете.

Позволяет вам регистрировать точки входа и выхода метода без какого-либо кодирования или повторного развертывания.

Также позволяет переопределить тело метода.Он предоставляет вам веб-интерфейс в качестве панели управления для включения или отмены трассировки ваших class.methods.

0 голосов
/ 21 февраля 2013

Похоже, есть еще одно решение - Byteman . Своими словами:

Byteman - инструмент, который упрощает трассировку и тестирование Java программы. Byteman позволяет вставлять дополнительный код Java в ваш приложение, как оно загружается во время запуска JVM или даже после он уже начал работать. Введенный код разрешен доступ любые ваши данные и вызывать любые методы приложения, в том числе где они частные. Вы можете ввести код практически в любое место и нет необходимости заранее готовить исходный код Вы должны перекомпилировать, перепаковать или повторно развернуть приложение. по факту Вы можете удалить введенный код и переустановить другой код, пока приложение продолжает выполняться.

0 голосов
/ 30 декабря 2010

Log4J полезно для отключения ведения журнала в зависимости от «уровня журнала» (DEBUG, INFO, WARN, FATAL).

Вы указываете в файле конфигурации, какой минимальный уровень вы хотите видеть в журналах, например, donне регистрируйте ничего ниже уровня INFO и вуаля!

...