本篇文章主要是为了记录踩的坑,避免下次又emo 了…

代码实现的效果如下图所示:
在这里插入图片描述

agent 代码:

新建 trace-agent

pom.xml 中的配置如下:(没有看错,不使用任何依赖)

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<archive>
					<manifestEntries>
						<Project-name>${project.name}</Project-name>
						<Project-version>${project.version}</Project-version>
						<Premain-Class>com.ibicd.TraceAgent</Premain-Class>
					</manifestEntries>
				</archive>
				<skip>true</skip>
			</configuration>
		</plugin>
	</plugins>
</build>

新建类: com.ibicd.TraceAgent

包名和类名需要和maven pom.xml 配置文件中的 Premain-Class 完全相同,代码如下:

package com.ibicd;
import java.lang.instrument.Instrumentation;

public class TraceAgent {

    public static void premain(String args, Instrumentation inst) {
        System.out.println("TraceAgent.premain: " + args);
    }
}

新建 trace-agent-demo

没什么特殊的代码,pom.xml 中不需要引入任何依赖,只需写一个测试类(AgentTest.java):

package com.ibicd;

public class AgentTest {

    public static void main(String[] args) {

        System.out.println("hello world");
    }
}

运行 AgentTest 时配置 java agent:

可能人人都知道只需配置对应的agent 路径就可以了,没错。就是:

-javaagent:trace-agent\target\trace-agent-1.0-SNAPSHOT.jar=name=张三

配置没问题呀,就是输出的内容始终都是 “hello world”
陷入沉思~
反复确认路径有没有写错,单次有没有写错~~
这就是要说的第二个坑,看下文

遇过的坑:

1. premain 中的参数类型错误

没看错,就2个入参都会写错!使用AI 编程,不得不说有时候 TA 真的很自作聪明,然而又想当然的认为TA很聪明,眼力跟不上。将 premain() 中的入参 args 类型定义为了 String[] ,狂汗!(真想给自己两巴掌~)

2. 虚拟机参数位置配错

正常来说,要运行一个类,要配置运行参数,就会打开:
在这里插入图片描述
于是看到下面这个红框起来的部分,然后把 参数写到 Program arguments 一栏(成功入坑):
在这里插入图片描述
这时,会无数次怀疑是我写的路径不对? 哪个单词写错了?改了又改还是输出 “hello world” ?

经过排查后,IDEA 把 VM options 藏起来了!打开方式:
在这里插入图片描述
再把上面的参数路径配置写入刚添加的输入框中:
在这里插入图片描述
然后再保存运行,查看控制台输出(终于松了一口气):
在这里插入图片描述

总结

用IDEA 添加参数时,需要先明确添加的是什么参数,不要见框就填!!!关于如何知道自己要添加的参数类型,参照下面的截图:
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐