Tag: javaagents

无法使用javaagent为apach httpclient设置spring boot uber jar应用程序

我正在尝试用Bytebuddy编写一个javaagent来拦截apache httpclient请求,我想将这个代理用于spring boot应用程序。 当我从Idea(直接运行main方法)启动测试Spring启动应用程序时,代理工作正常。 但是,当我将应用程序打包到spring boot uber jar并使用java -javaagent:myagent.jar -jar myapplication.jar运行它时,它会抛出以下exception。 onError:org.apache.http.impl.client.AbstractHttpClient java.lang.NoClassDefFoundError: org/apache/http/HttpHost at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.getDeclaredMethods(Class.java:1975) at net.bytebuddy.description.method.MethodList$ForLoadedType.(MethodList.java:106) at net.bytebuddy.description.type.TypeDescription$ForLoadedType.getDeclaredMethods(TypeDescription.java:985) at net.bytebuddy.implementation.MethodDelegation$MethodContainer$ForExplicitMethods.ofStatic(MethodDelegation.java:1037) at net.bytebuddy.implementation.MethodDelegation.to(MethodDelegation.java:247) at net.bytebuddy.implementation.MethodDelegation.to(MethodDelegation.java:226) at com.yiji.dtrace.agent.httpclient4.interceptor.HttpClient4Interceptors$1.transform(HttpClient4Interceptors.java:48) at net.bytebuddy.agent.builder.AgentBuilder$Transformer$Compound.transform(AgentBuilder.java:457) at net.bytebuddy.agent.builder.AgentBuilder$Default$Transformation$Simple$Resolution.apply(AgentBuilder.java:2791) at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:3081) at sun.instrument.TransformerManager.transform(TransformerManager.java:188) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access$100(URLClassLoader.java:73) at […]

如果没有-javaagent vm选项,Spring AspectJ编织如何工作?

我知道Spring避免使用-javaagent vm选项以使其AspectJ加载时间编织工作,而是依赖于类加载器来启动代理。 我认为Java规范规定使用Java代理的唯一方法是通过-javaagent vm选项。 我错了吗? 有人可以指示我使用官方的Java规范/文档来澄清我的审讯吗?

如何使用检测打印出Java中运行时调用的所有方法?

我想打印出在运行时调用的所有方法。 它们应该按照它们被调用的顺序打印出来,如果它们被多次调用,它们应该多次打印。 这可以用于逆向工程 – 查看按下按钮或执行特定操作时调用哪些函数。 我想为此使用Java代理和检测。

如何在类路径中放置javaagent的类

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

使用轴api的Lotus Notes 6.5中的JavaAgent给出了exception“没有为org.apache.commons.logging.LogFactory定义实现”

我需要在Lotus Notes 6.5 DB中编写JavaAgent来访问Web服务。 我为此目的使用了Axis Apache API。 我创建了一个Java代理,并使用“编辑项目”按钮在代理中添加了轴的jar文件。 以下是代理商代码: import lotus.domino.*; import javax.xml.*; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import javax.xml.namespace.QName; import java.net.URL; public class JavaAgent extends AgentBase { public void NotesMain() { try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); String endpoint = “http://ws.apache.org:5049/axis/services/echo”; Service service = new Service(); Call call = (Call) service.createCall(); […]

将-javaagent添加到Tomcat 6服务器,我在哪里放置它以什么格式?

我正在尝试安装一个可以监视J2EE Web事务的应用程序运行状况监视应用程序,我需要以某种方式将一个javaagent放入我的Tomcat但是我不知道如何做到这一点,我正在使用Linux并且已经被软件指示使该产品做以下事情的公司: -javaagent: 我得到了他们的进一步支持,他们基本上说要把它放到适当的.sh文件中(但他们无法告诉我哪个文件适用于Tomcat) 我尝试将它放在catalina.sh文件中,但它似乎不起作用: JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:MaxPermSize=256m -javaagent:”C:\WebTransactionAgent.jar” 任何建议表示赞赏

程序启动后启动Java代理程序

是否可以在虚拟机启动后从同一个VM中插入javaagent? 让我们说例如我们在jar myagent.jar中有一个代理,其中包含相应的元数据设置和已经实现的agentmain方法。 现在,用户程序调用API调用,该调用应该导致代理插入,以便它可以重新定义类。 可以这样做吗?

使用Instrumentation记录未处理的exception

我试图使用instrumentation调试java应用程序。 当前系统的问题是 几乎没有写任何日志声明 差异处理不当 这使得很难追溯function损坏的根本原因。 为了处理这种情况,我开发了工具,java代理使用Instrumentation API,我能够注入日志语句,并解决了一半的问题。 但下一个问题是记录exception。 我想在应用程序执行期间抛出的每个exception都扩展我的工具记录。 我尝试使用javaassist API为方法注入’try-catch’块(使用addCatch , insertBefore和insertAfter ),并且它在某种程度上是有效的。 public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if (className.startsWith(“com/alu/”)) { return insertLog(className, classBeingRedefined, classfileBuffer); } if(className.endsWith(“Exception”)){ System.out.println(“============= exception occured “+className); } 这里inserLog(..)方法将注入必要的日志语句并且工作正常,但是当有任何exception时它不会来到变换器。 但问题是一些方法处理exception内部(即使没有log / sysout)。 例如: try { if(search.equals(“Category”)){ //do operation } } […]

如何在不停止JVM的情况下将Javaagent添加到JVM?

我希望在不停止应用程序的情况下分析Java应用程序。 我可以在应用程序运行时以某种方式添加Javaagent吗?