# agent-demo **Repository Path**: who7708/agent-demo ## Basic Information - **Project Name**: agent-demo - **Description**: java agent debug - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-12-08 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 写一个Agent ## 编写一个Java类,并包含如下两个方法中的任一个: ``` public static void premain(String agentArgs, Instrumentation inst); //【1】 public static void premain(String agentArgs); //【2】 其中,【1】和【2】同时存在时,【1】会优先被执行,而【2】则会被忽略。 ``` 具体使用如下代码: ``` import java.lang.instrument.Instrumentation; public class MyAgent { public static void premain(String agentArgs, Instrumentation inst) { System.out.println("this is an agent."); System.out.println("args:" + agentArgs + "\n"); } } ``` ## jar打包 在代码的resources目录下添加META-INF/MANIFEST.MF文件。其目的是指定Premain-Class的类。 ``` Manifest-Version: 1.0 Premain-Class: cn.net.spring.agent.demo.MyAgent Can-Redefine-Classes: true ``` ## 在pom.xml中配置打包的相关配置 ``` jar my-agent org.apache.maven.plugins maven-jar-plugin 2.3.2 true src/main/resources/META-INF/MANIFEST.MF org.apache.maven.plugins maven-compiler-plugin 1.7 1.7 ``` 最后,执行mvn clean package,就能生成一个my-agent.jar # 运行Agent 新建一个测试类。如下: ``` public class AgentTest { public static void main(String[] args) { System.out.println("this is main"); } } ``` ## 在idea中配置运行参数 找到 vm option 填写如下: ``` -javaagent:/Users/chmy/docker/skywalking/agent-demo/target/my-agent.jar=hello-agent ``` 直接就可以debug了