jjzjj

javaagents

全部标签

Javaagent 报告 "redefineClasses is not supported in this environment"

我是Java代理的新手。我创建了一个简单的HotswapAgent类(从Play!Framework中嗅探):publicclassHotswapAgent{staticInstrumentationinstrumentation;publicstaticbooleanenabled=false;publicstaticvoidpremain(StringagentArgs,Instrumentationinstrumentation){HotswapAgent.instrumentation=instrumentation;HotswapAgent.enabled=true;}pub

java - 如何测试 ClassFileTransformer/javaagent?

我使用ASM为javaagent实现了一个ClassFileTransformer。因为它有一些bug,我想为它写一个JUnit测试用例。我该怎么做?使用我认为的伪代码://HaveatestclassassubjectpublicstaticclassSubject{publicvoiddoSomething(){...}}//Manuallyloadandtransformthesubject...?//NormallyexecutesomenowtransformedmethodsofthesubjectnewSubject().doSomething();//Checkther

java - 使用 Instrumentation 记录未处理的异常

我正在尝试使用检测来调试Java应用程序。当前系统的问题是几乎没有写过任何日志语句异常处理不佳这使得追踪功能损坏的根本原因变得非常困难。为了处理这种情况,我开发了工具,使用InstrumentationAPI的java代理,我能够注入(inject)日志语句并解决了一半的问题。但下一个问题是记录异常。我想扩展我的工具记录应用程序执行期间抛出的每个异常。我尝试使用javaassistAPI为方法注入(inject)“try-catch”block(使用addCatch、insertBefore和insertAfter),并且在一定程度上是有效的。publicbyte[]transform

java - JVM 能否检索已通过附加 api 加载到其中的代理列表?

是否有可能通过Java1.6attachapi获得加载到当前JVM的代理列表?如果是怎么办?启动时加载的代理可以通过RuntimeMXBean确定,但我看不到一种方法来处理启动后添加的代理。 最佳答案 (此问题类似于HowtofindlistofjavaagentsattachedwitharunningJVM?。为了完整起见,我将对这两个问题添加此答案。)检查使用AttachAPI添加的代理:如果您对使用AttachAPI在运行时添加到应用程序的代理感兴趣,您可以使用DiagnosticCommandMBean.这个bean提供了

Java - 将 java 代理注入(inject)运行的 jvm

基本上,我正在尝试编写一些东西来列出JVM加载的每个类。我写的东西有效,但它只适用于它运行的jvm。我制作了一个java代理来动态注入(inject)另一个JVM,但后来意识到我实际上并不知道如何注入(inject)它。我如何实际将此代理发送到另一个JVM?可能吗? 最佳答案 动态代理需要声明一个agentmain(String,Instrumentation)方法,该方法在目标VM内连接时执行。您可以使用仅包含在JDK而不是JRE中的tools.jar依赖项(直到Java9)。但是,您可以将代理程序与JDK捆绑在一起,然后从那里附

java - 开发javaagents时如何运行测试?

我正在尝试摆弄Foursquare'sHeapAudit,并尝试使用IntelliJIDEA进行设置。使用pom.xml中的依赖项,我设法让它构建得很好。但是,当我实际尝试运行JUnit测试时,基本上所有测试都失败了。我猜这是因为使用HeapAudit需要JVM作为-javaagent启动,根据github:$java-javaagent:heapaudit.jarMyTest如果我放入此行并引用我之前下载/构建的heapaudit.jar,大概测试会通过。但是,在我看来,如果我更改源代码,我将需要重新打包这个愚蠢的.jar文件以查看它是否有效。是否有任何方法可以使用-javaagen

java - Eclipse : -javaagent 中的默认 VM 参数

我需要将以下参数设置为Eclipse中的默认VM参数-javaagent/Developer/aspectj-1.6/aspectjweaver.jar当我添加该行并运行我的代码时,出现错误:Unrecognizedoption:-javaagentCouldnotcreatetheJavavirtualmachine.我该如何解决这个问题? 最佳答案 -javaagent和JAR之间需要一个冒号(:),而不是空格。例如:-javaagent:/Developer/aspectj-1.6/aspectjweaver.jar

java - 如何将 javaagent 的类放在类路径中

我正在尝试开发一个javaagent,它可以在asm-4的帮助下检测代码。现在我遇到了一个非常基本的问题,javaagent的类加载器没有看到asm依赖项,因此失败了。我是否必须提供一个包含代理所需的所有类的jar-with-dependencies(又名maven构建插件),或者是否有另一种方法可以将类添加到java代理?直接在类路径中引用jarasm-all.jar没有帮助。构建jar-with-dependencies一开始并没有帮助,因为无法使用程序集插件设置Premain-Class属性。感谢帮助;-) 最佳答案 ok,通

解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件

本文分享自华为云社区《服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析》,作者:华为云高级软件工程师栾文飞一、概述Sermant是基于Java字节码增强技术的无代理服务网格,其利用Java字节码增强技术,为宿主应用程序提供服务治理功能,以解决大规模微服务场景中的服务治理问题,通过Java字节码增强技术,可以非侵入的提供服务治理能力。在以往版本中,Sermant通过配置-javaagent指令在微服务启动时接入服务治理能力,当需要接入及卸载Sermant时都需要通过重新启动微服务来完成。但从1.2.0版本开始,Sermant实现了在服务不停机状态下进行安装和卸载的能力,

How to dynamically add an HTTP Interceptor to a Spring program by mounting a Javaagent

InjectingcodetoprintHTTPrequestheadersdynamicallyintoaSpringapplicationusingaJavaagentandASMrequirescarefulbytecodemanipulation.Belowisaspecificanddetailedexampledemonstratingthisprocess.Pleasenotethatthisexampleissimplifiedandmaynotcoveralledgecases.CreatetheJavaAgent:CreatetheJavaagentclass(MyJava