关于javaagents的教程

ali*_*mon 52 java javaagents

我想学习一些关于javaagents的东西,但研究并不容易.大多数结果指的是JADE.我知道java代理可能意味着两件事:

  1. 用Java编程的代理是分布式系统的代理概念的化身.
  2. 用于增强JVM工作的低级软件组件,例如分析器,代码覆盖工具等

我在这里找到了类似的问题,但不幸的是它也提到了版本1.

你知道任何文章,初学者的教程,关于版本2中javaagent的示例项目吗?我在这里找到了一个,但我正在寻找更多.

npe*_*npe 79

第二个案例讨论Java Instrumentation API - 这个链接指向一个相当描述性的Javadoc.

这里是完整的指令和如何创建java检测代理示例.

主要概念是:

  1. 实现静态premain(作为类比main)方法,如下所示:

    import java.lang.instrument.Instrumentation;
    
    class Example {
        public static void premain(String args, Instrumentation inst) {
            ...
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个清单文件(例如manifest.txt),标记此类以进行预执行.其内容是:

    Premain-Class: Example
    
    Run Code Online (Sandbox Code Playgroud)
  3. 编译类并将此类打包到JAR存档中:

    javac Example.java
    jar cmf manifest.txt yourAwesomeAgent.jar *.class
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用-javaagent参数执行JVM ,如下所示:

    java -javaagent:yourAwesomeAgent.jar -jar yourApp.jar
    
    Run Code Online (Sandbox Code Playgroud)

  • 重要的是`-javaagent`参数在`-jar`参数之前. (14认同)
  • 我最近按照这些步骤构建了一个代理.我一直遇到创建jar的问题,直到我发现该命令应首先列出目标.jar文件,然后列出清单文件. (2认同)