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

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

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

<dependency>
	<groupId>com.sun</groupId>
	<artifactId>tools</artifactId>
	<version>1.5.0</version>
	<scope>system</scope>
	<systemPath>D:/Program Files/Java/jdk1.8.0_192/lib/tools.jar</systemPath>
</dependency>

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

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

pom中使用本地环境变量

Maven 读取环境变量

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

修改后:

<dependency>
	<groupId>com.sun</groupId>
	<artifactId>tools</artifactId>
	<version>1.5.0</version>
	<scope>system</scope>
	<systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

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

loadAgent时报错了:

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

 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内部原理

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值