调试Java代理

Gil*_*son 10 java debugging profiler instrumentation

我目前正在开发Java代理,以便于新旧Java应用程序的动态检测.

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

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

Moh*_*hti 8

Java中所述...如何... -javaagent:选项:

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

这个名称具有误导性,因为"代理"这个词通常表明某些东西是远程地与主要实体分开工作的.但事实证明-javaagent中使用的java代理程序要简单得多.

一个java应用程序可以通过任意次数使用-javaagent:option来拥有任意数量的代理程序.按照选项中指定的顺序调用代理.

每个代理也可以采用字符串值args.我猜这就是为什么我们必须多次为多个代理使用此选项的原因.否则,我们可能只是做了类似的事情:

-javaagent agent1.jar:agent2.jar
Run Code Online (Sandbox Code Playgroud)

,这是不正确的.

因此,通过将探查器代理(例如YourKit,JIP等)放在您自己的代理之前,将为您提供调试控制.