问题标签 [javaagents]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 代理有哪些有趣的用途?
从 Java 5 开始,可以选择将 Java 代理添加到类加载器。
你写过代理吗?你用过代理吗?代理有什么有趣的用途?
debugging - 调试器不适用于 JMockit
希望这里有一个简单的问题......
我正在使用 RAD 7.5.2,并且正在编写 Junit 测试。我用 JUnit 3 写得很好,然后我想模拟一些函数调用。所以我加载了 jmockit 0.9.7 和 Junit 4.6。我还包括 -javaagent:jmockit.jar 作为 VM 参数。
当我“运行为 Junit 测试”时,它完全没有问题(至少,我在输出中看不到任何问题)。Junit 的输出很好,没有错误转储到控制台。
当我“调试为 Junit 测试”时,它不起作用。它让我陷入:
InstrumentationImpl.class --> 找不到源
......当我点击继续......
NativeMethodAccessorImpl.class --> 找不到源
...当我点击继续...
JUnit 在此之后结束。它将以下内容转储到控制台:
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl) 的线程“main”java.lang.reflect.InvocationTargetException 中的异常.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:160) 原因:java.lang.UnsatisfiedLinkError: sun/instrument/ InstrumentationImpl.redefineClasses0([Ljava/lang/instrument/ClassDefinition;)V at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:98) at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:197) at mockit.internal。重新定义引擎。在 mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:116) 在 mockit.internal.RedefinitionEngine.setUpInternalStartupMock(RedefinitionEngine.java:53) 在 mockit.internal.Startup.loadInternalStartupMocks(Startup.java) 的 redefineMethods(RedefinitionEngine.java:184) :123) 在 mockit.internal.Startup.initialize(Startup.java:110) 在 mockit.internal.Startup.premain(Startup.java:97) ... 还有 5 个
致命错误:处理 -javaagent 失败
我可以毫无问题地在我的测试上运行 JUnit 3 和 JUnit 4,当我使用 -javaagent:jmockit.jar (使用调试器;它们本身很好)时,事情变得丑陋,我必须这样做使用 jmockit 的东西。
想法?
jvm - 如何使用多个 Java 代理启动我的 Java 程序?
我知道如何使用 java 代理启动 java 程序:
但是如果我想添加 2 个或更多 Java 代理来检测我的程序怎么办?我不想为必须在 JVM 中加载的每个代理重新调用 java -javaagent:...。
我试过这样的事情:
或类似的东西:
但是没有成功。
有解决我问题的答案吗?
谢谢你。
java - Javaagent 类卸载
我有一个检测字节码的 java 代理。我正在使用 java 6 中的附加 api 来允许用户使用我的 java 代理动态加载代理和仪器以及 deinstrument 代码。我正在使用 Boot-Class-Path 清单属性来确保我的 javagent 类位于引导类路径中,以便我的用户可以检测 ArrayList 等类。
但是,问题来自版本控制。假设用户动态附加了我的代理的版本 1。然后我给了他第 2 版。现在,自从他附加了我的代理的第 1 版后,他的应用服务器从未关闭过,所以第 1 版的类仍在加载。
我需要一些方法,以便当我的 javaagent 客户端版本 2 时,版本 1 被卸载。
我知道一种方法是为我的 javaagent 的类编写一个客户类加载器,并将类加载器引用设置为 null。但是在这种情况下,我将无法在引导类路径中检测类,因为我的类加载器将位于引导类加载器的层次结构中,因此我的用户无法检测像 ArrayList 这样的类,因为如果我在 ArrayList 的方法中添加一个调用到我的一个代理类的方法,引导类加载器将无法看到它们。
那么有什么办法可以解决引导类路径问题,并且仍然卸载以前代理的类吗?
java - 程序启动后启动 Java 代理
是否可以在虚拟机从同一 VM 内启动后插入 javaagent?
例如,我们在 jar myagent.jar 中有一个代理,它具有适当的元数据设置和一个已经实现的 agentmain 方法。现在用户程序调用一个 API 调用,这应该会导致代理的插入,以便它可以重新定义类。
可以做到吗?怎么做?
c# - 相当于 C# 中的 -javaagent?或者:在 C# 中使用 java 框架的方法
这可能是我应该能够自己弄清楚的事情,但我运气不好,所以我想我会问。
问题:我正在将一个系统从 java 转换为 C#,他们使用了一个我非常想使用的 java 框架,因为它处理了系统中最复杂的部分,否则我必须自己实现这些部分。我有这个框架的源代码。
我知道在 C# 中使用 java 库有多种可能性(尽管我对其中任何一个都不熟悉,所以我很感激建议)。到目前为止,我一直在考虑使用IKVM.NET来生成 .dll,但我不确定下一步该做什么,因为在 java 中,为了使用您的代码运行框架,您应该使用选项 -javaagent通过添加
-javaagent:bin/deuceAgent.jar
(deuceAgent
框架在哪里)
到你的java命令行。我不知道拥有 .dll 后 C# 中的等价物是什么,或者根本不知道是否有等价物。
有什么帮助吗?非常感谢。
java - java 代理是否在单独的线程中运行?
我觉得这是我应该知道的,但是 java 代理(用 -javaagent 指定)是否在单独的线程中运行?我读过Java 代理是一个可插入的库,它嵌入在 JVM 中运行并拦截类加载过程,但我想确定:它真的拦截了它们(听起来像是在另一个线程中运行并监视类加载)还是由 JVM 通知(JVM 调用它来解决类负载;它没有单独的线程)?
再一次,我觉得我应该能够弄清楚,但是对我好一点,我工作太努力了,我的大脑有点炸了:P
谢谢!
metaprogramming - 使用变形代码减少样板文件
有没有人见过变质代码——即生成和运行指令的代码(包括 IL 和 Java 字节码,以及本机代码)——用于减少样板代码?
无论应用程序或语言如何,通常都有一些数据库代码来从数据库中获取行并返回对象列表。当然,根据您的数据库连接器,有无数种方法可以做到这一点。您最终可能会按索引访问行的单元格(很尴尬,因为将“SELECT Name, Age”更改为“SELECT Age, Name”会破坏您的代码,并且索引会混淆含义),或者使用 myObject.Age = resultRow. getValue("Age") (尴尬,因为这涉及简单地遍历每个字段以根据列设置其数据)。
与数据库主题保持一致,LINQ to SQL 非常棒。但是,定义数据模型就不那么棒了,尤其是当您的数据库有太多表以致 SSMS 无法在对象浏览器中列出所有这些表时。另外,我不喜欢的不是存储过程的编写或 SQL 的参与;只是对象与数据库的连接。
我实习的公司的某个人从我们的 SqlCommand 类(继承自 System 类)中编写了一个非常棒的方法,该方法使用 .NET 反射和 System.Reflection.Emit 来生成一个设置字段的方法(装饰有包含列名称的属性)在具有空构造函数的任何模型对象上。我会考虑这种变形,因为程序的特定部分编写了新方法。
这种从数据库生成对象的模式只是一个例子。两天前我遇到的一个是对 SWT 的数据绑定支持(通过 JFace)。我用 setAddress(Address address) 和 getName() 制作了这些非常干净的模型,现在我必须用 PropertyChangeSupport 发射器污染设置器并携带一个 PropertyChangeSupport 实例(即使它只是在抽象基类中)!然后我找到了 PojoBindables,现在我感觉自己像一个 80 级的数据绑定器,只是因为我需要写的更少。
具体来说,使用本机代码和类似这样的东西或Java 代理的东西会非常好。
classloader - how to resolve java result 1 errors
How to resolve 1 particular flavor of 'java result 1' in the context of using JVMTI agents?
java - 使用 -javaagent 而不将代理打包到 jar 中
是否可以在java -javaagent:myagent.jar some.package.Main
没有将代理打包到 jar 的情况下运行?就像是java agent.MyAgent some.package.Main
我有一个代理的源代码,希望能够对其进行调试,然后再对其进行更改,因此根本不需要使用它-javaagent
,而是选择some.package.Main
通过 GUI 执行。
BTrace能够使用 PID 连接到正在运行的进程或使用-javaagent
. 我正在寻找类似于第一种方法的东西(使用 PID),但是我也可以从头开始一个过程。