Instrumentation调用栈跟踪Lab

方法一

跟书本相同的方法,比书本描述更详细些

参考https://www.cnblogs.com/756623607-zhang/p/12575509.html

首先创建maven项目

然后将AgentMain打包为Agent的jar包:使用maven-jar-plugin插件打包在pom.xml中配置打包属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestEntries>
<Agent-Class>org.example.AgentMain</Agent-Class>
<Premain-Class>org.example.AgentMain</Premain-Class>
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
</manifestEntries>
</archive>
</configuration>
</plugin>

在项目根目录执行mvn clean package生成jar包,报错如下。

image-20220106113428746

原因:rt包没有打包到项目中去,需要在pom.xml文件中配置,将jdk的相关jar加入项目中,参考,修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
<!-- 将jdk的依赖jar打入项目中,这样项目中使用的jdk的依赖就可以正常使用 -->
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>

重新执行mvn clean package,构建完成

image-20220106114334500

可以在target目录找打对应的jar包

image-20220106114420545

把jar包移至MyTest的同一目录,执行

1
java -javaagent:AgentTest-1.0-SNAPSHOT.jar MyTest

但是报错找不到或无法加载主类,猜想可能是因为打包Jar包后没有生成MANIFEST.MF造成的。

build内可用finalName指定包名

image-20220106154734433

完全按照参考链接进行测试,发现还是会报错

image-20220106164129830

方法二

参考https://www.cnblogs.com/huanshilang/p/12206644.html

讲了一些原理性的东西



----------- 本文结束 -----------




0%