agentmain 使用过程中的坑,看看你有没有遇到

com.sun.tools.attach.AttachNotSupportedException: no providers installed

我出现这个报错,是因为我引的包有问题,本地装了jdk的话,可以这样引用tools.jar


	com.sun
	tools
	1.5.0
	system
	D:/Program Files/Java/jdk1.8.0_192/lib/tools.jar

systemPath标签用来指定本地的tools.jar位置

可以把tools.jar的绝对路径配置成相对路径:

pom中使用本地环境变量

Maven 读取环境变量

Eclipse maven工程 Missing artifact com.sun:tools:jar:1.7.0:system 解决方法

修改后:


	com.sun
	tools
	1.5.0
	system
	${env.JAVA_HOME}/lib/tools.jar

com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize

loadAgent时报错了:

 然后看了下业务线程的后台日志:

agentmain 使用过程中的坑,看看你有没有遇到_第1张图片

 adding retransformable transformers is not supported in this environment

看这个样子是不支持,我一下就想到一个配置

在META-INF/MANIFEST.MF文件中:

Manifest-Version: 1.0
Agent-Class: com.umbrella.robot.agent.AgentMainTraceAgent
Can-Redefine-Classes: true

 最后加上一行

Can-Retransform-Classes: true

修改后:

Manifest-Version: 1.0
Agent-Class: com.umbrella.robot.agent.AgentMainTraceAgent
Can-Redefine-Classes: true
Can-Retransform-Classes: true

 

可运行的源码都已经提交在https://gitee.com/jinxin.70/javaagentparent。

 

总结:

所谓的坑,其实大都是因为对使用的工具不熟悉导致的,比如错误的配置,或者没有配置某些配置。说白了,其实是不够熟悉。

简言之,没有遵守工具的使用规范。

每一种工具都是用来解决某些问题的,有它自己擅长的领域,反之,有它不适合的领域。

 

觉得吧,通过故意试错,跟源码,应该是最快的熟悉的过程,当然这种也不是绝对的,有时间再扯。

 

通过对异常代码的跟踪,对agent的源码更熟悉了,后面再写一篇源码解析的文章,记录一下agent内部原理

你可能感兴趣的:(java)