调试Java代理

调试Java代理,java,debugging,profiler,instrumentation,Java,Debugging,Profiler,Instrumentation,我目前正在开发一个工具,以促进新的和旧的Java应用程序的动态插装 我突然想到,就IDE调试而言,Java代理可能被认为是一种特殊情况,因为它们需要注入目标JVM进程才能运行。因此,自然会产生这样一个问题:如何调试、测试和分析代理类型的应用程序 对现有解决方案的粗略搜索发现了一些基于命令行的选项(如YourKit、JIP等),但其中许多也是隐藏的Java代理。如果使用它,至少在我看来,将导致一个代理调试/分析另一个代理的非常奇怪的场景。我知道代理可以分层排列,但是我不确定代理应用程序是否可以通过

我目前正在开发一个工具,以促进新的和旧的Java应用程序的动态插装

我突然想到,就IDE调试而言,Java代理可能被认为是一种特殊情况,因为它们需要注入目标JVM进程才能运行。因此,自然会产生这样一个问题:如何调试、测试和分析代理类型的应用程序

对现有解决方案的粗略搜索发现了一些基于命令行的选项(如YourKit、JIP等),但其中许多也是隐藏的Java代理。如果使用它,至少在我看来,将导致一个代理调试/分析另一个代理的非常奇怪的场景。我知道代理可以分层排列,但是我不确定代理应用程序是否可以通过在这个庄园中堆叠代理进行调试

如中所述:

代理只是主方法前面的拦截器,已执行 在同一JVM中,并由同一系统类加载器加载,以及 由相同的安全策略和上下文管理

这个名字有误导性,因为“代理”这个词通常意味着 与主实体分开远程工作的东西。但是 事实证明,-javaagent:中使用的java代理要简单得多 比那还多

一个java应用程序可以使用任意数量的代理 -javaagent:option任意次数。代理的调用顺序与选项中指定的顺序相同

每个代理还可以接受字符串值的参数。我想这就是原因 为什么我们必须对多个代理多次使用此选项。 否则,我们可以做一些类似的事情:

-javaagent agent1.jar:agent2.jar
,这是不正确的


因此,通过将探查器代理(例如YourKit、JIP等)放在您自己的代理之前,将调试控制权交给您。

您从中复制了大部分文章,没有署名。我已经在正文(从一开始)中提供了参考,因此我不理解您的观点。你的建议是什么?@MohammadDashti-简单地在你的帖子中添加链接是不可接受的。您必须将任何复制的措辞放在块引号中,并清楚标识其复制来源。我在上面已经做过了。