14

我目前正在开发一个Java 代理,以促进新旧 Java 应用程序的动态检测。

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

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

4

1 回答 1

10

Java How To ... -javaagent: 选项中所述:

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

该名称具有误导性,因为代理一词通常表示远程工作且与主要实体分开工作。但事实证明 -javaagent: 中使用的 java 代理比这简单得多。

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

每个代理也可以采用字符串值参数。我想这就是为什么我们必须为多个代理多次使用此选项的原因。否则,我们可以这样做:

-javaagent agent1.jar:agent2.jar

,这是不正确的。

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

于 2013-08-10T14:35:14.727 回答