Отладка агента Java

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

Мне пришло в голову, что в отношении отладки IDE Java-агенты могут быть, по-видимому, рассмотрены как частный случай, поскольку они должны быть введены в целевой JVM-процесс для запуска. Это, естественно, порождает вопрос о том, как можно было бы отлаживать, тестировать и профилировать приложение типа агента.

Беглый поиск существующих решений показал несколько опций на основе командной строки (т.е. YourKit, JIP и т.д.), однако многие из них являются ТАКЖЕ Java-агентами под капотом. Которая, если она будет использована, приведет, по крайней мере, на мой взгляд, к довольно странному сценарию отладки/профилирования агента другим агентом. Я знаю, что агенты могут быть сложены в иерархическом порядке, однако я не уверен, что Agent Applications можно отладить, уложив агентов в эту усадьбу.

Ответ 1

Как указано в Java How To... -javaagent: Option:

Агент - это просто перехватчик перед вашим основным методом, выполненный в той же JVM и загружается одним и тем же системным загрузчиком классов, и управляемый одной и той же политикой безопасности и контекстом.

Название вводит в заблуждение, так как слововой агент обычно предлагает что-то работающее удаленно и отдельно от основного объекта. Но получается, что java-агент используется как -javaagent: намного проще чем это.

В одном приложении Java может быть любое количество агентов, используя -javaagent: опция любое количество раз. Агенты вызывается в том же порядке, который указан в параметрах.

Каждый агент может также принимать аргументы, зависящие от строки. Я предполагаю, что причина почему мы должны использовать этот параметр несколько раз для нескольких агентов. В противном случае мы могли бы просто сделать что-то вроде:

-javaagent agent1.jar:agent2.jar

что неверно.

Таким образом, поставив агент профилировщика (например, YourKit, JIP и т.д.), прежде чем ваш собственный агент предоставит вам контроль отладки.