我目前正在开发Java Agent,以便于新旧Java应用程序的动态检测。
在我看来,就IDE调试而言,Java代理可能被认为是一种特殊情况,因为它们需要被注入目标JVM进程才能运行。因此,自然会产生如何调试,测试和分析代理类型应用程序的问题。
粗略搜索现有解决方案会出现一些基于命令行的选项(即YourKit,JIP等),但其中许多都是Java代理。如果使用它将导致至少在我看来,代理调试/分析另一个代理的相当奇怪的情况。我知道代理可以按层次排列堆叠,但是我不确定是否可以通过在此庄园中堆叠代理来调试代理应用程序。
答案 0 :(得分:8)
如Java How To ... The -javaagent: Option中所述:
代理只是主方法前面的拦截器,已执行 在同一个JVM中并由同一系统类加载器加载,并且 由相同的安全政策和背景支配。
该名称具有误导性,因为代理人通常建议使用 远程工作并与主要实体分开工作的东西。但 事实证明-javaagent中使用的java代理:更简单 不止于此。
一个java应用程序可以使用任意数量的代理程序 -javaagent:任意次数的选项。代理的调用顺序与选项中指定的顺序相同。
每个代理也可以使用String-valued args。我猜这就是原因 为什么我们必须多次为多个代理使用此选项。 否则,我们可能只是做了类似的事情:
-javaagent agent1.jar:agent2.jar
,这是不正确的。
因此,通过将探查器代理(例如YourKit,JIP等)放在您自己的代理之前,将为您提供调试控件。