标签: javaagents

获取所有JADE容器的列表

我想获得当前平台中所有容器的列表.这个问题类似,但答案已经过时,方法是向AMS代理查询.有没有比通过ACL消息进行通信更简单的方法,我认为这很复杂,应该有一个方法来获得一个简单的容器列表.谢谢你的帮助

javaagents agents-jade

2
推荐指数
1
解决办法
2891
查看次数

检查是否加载了aspectjweaver(或任何javaagent)

是否有(pref便携式)方法来检查JVM是否已经声明了特定的 -javaagent

特别是我有兴趣知道是否加载了aspectj加载时间织入器.(我正在尝试在启动不正确的情况下提供有用的错误消息).

java aspectj javaagents

2
推荐指数
1
解决办法
3074
查看次数

如何使用 3rd 方库依赖项部署 javaagent

我们编写了一个 javaagent 来帮助开发人员调试。但是,在发布这个工具之前,我们对java-agent的部署还有一些疑问。

用户可以将代理与某些 tomcat 应用程序一起使用。代理使用 Premain 方法来转换类。我们使用 javassist 3.18.2-GA 来插入代码。我们目前将 javassist.jar 添加到 MANIFEST.MF 的 Boot-Class-Path 中。我们把agent和javassist.jar都放到tomcat的lib目录下。

问题是:

  1. 好吧,至少,它有效。但这是为 tomcat 应用程序部署代理和依赖项的正确方法吗?
  2. 因为大多数使用 hibernate 的 tomcat 应用程序也使用 javassist 3.18.2-GA,所以现在可以了。但据我了解,3.20 与 3.18.2 并不完全兼容。建议有人将javassist 更新到更高版本,是否会由于2 个不同的javassist 之间的冲突导致代理或应用程序崩溃。

java tomcat manifest javaagents javassist

2
推荐指数
1
解决办法
1240
查看次数

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

我想打印出在运行时调用的所有方法。它们应该按照它们被调用的顺序打印出来,如果它们被多次调用,它们应该被打印多次。

这可用于逆向工程 - 查看当您按下按钮或执行特定操作时调用哪些函数。

我想为此使用 Java 代理和检测。

java instrumentation reverse-engineering javaagents javassist

2
推荐指数
1
解决办法
1919
查看次数

Java Instrumentation Agent是否在类中支持“新方法定义”?

我使用Instrumentation#redefineClasses(ClassDefinition)method 重新加载了我的测试应用程序类。当我尝试在类文件中添加新方法并从现有方法中调用它时。我这样做并不高兴。但是,当我调用某些现有方法和其他Java Built-In Library方法时,它运行良好。

我的问题是-Oracle或Open JDK实现是否知道/认识到此限制?我怀疑即使您可以使用INstrumentation Manifest.MF文件重新定义/重新转换类,也必须对它的使用范围有一定的限制。

有人对此事有经验吗?

java instrumentation javaagents

2
推荐指数
1
解决办法
343
查看次数

bootclasspath中javaagent jar的位置

我有一个javaagent jar,我把它放在bootclasspath上

Boot-Class-Path: myagent.jar
Run Code Online (Sandbox Code Playgroud)

在MANIFEST.MF文件中.

我需要找到jar所在文件系统的目录.

然而,这里描述的方法似乎并不适合我:

 new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().g­etPath());
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ProtectionDomain.getCodeSource()返回null.我想这种情况正在发生,因为jar已被放在引导类路径中.因此,我也无法通过MyClass.getClassLoader()来获取资源位置.

我使用的是Java 6.

任何人都可以告诉如何获得罐子的位置?

java instrumentation bytecode classloader javaagents

1
推荐指数
1
解决办法
3373
查看次数

检查非空后检测到空指针异常

我对一个不应该为null的变量有一个奇怪的java.lang.NullPointerException.

Object[] params = new Object[10];
if (param1 != null)
    params[0] = param1;
Run Code Online (Sandbox Code Playgroud)

param1作为方法参数给出,它可以为null.通常,当影响param1到params [0]时,它不为null(否则它不会传递if语句).

这是错误(第144行是"params [0] = param1;"):

Exception in thread "Jalen Agent" java.lang.NullPointerException
    at jalen.MethodStats.onMethodEntry(MethodStats.java:144)
    at hanoi.TowersOfHanoi.solveHanoi(TowersOfHanoi.java)
    at hanoi.TowersOfHanoi.main(TowersOfHanoi.java:29)
Run Code Online (Sandbox Code Playgroud)

以下是发生异常的方法的完整代码:

public static void onMethodEntry(int id, String className, String methodName, Object param1, Object param2, Object param3, Object param4, Object param5) {
    synchronized (globalLock) {
        Object[] params = new Object[10];
        if (param1 != null)
            params[0] = param1;
        if (param2 != null)
            params[1] = param2;
        if (param3 != null)
            params[2] = …
Run Code Online (Sandbox Code Playgroud)

java nullpointerexception javaagents java-bytecode-asm

1
推荐指数
1
解决办法
2978
查看次数

有没有办法在两个完全独立的线程之间进行通信?

我试图在两个不共享任何 Java 对象的线程之间进行通信(我正在构建一个 Java 代理)。我需要的是以下内容:

Thread agentattachThread = ...;
otherThread.send("Hello");
Run Code Online (Sandbox Code Playgroud)

这将像 Agent Attach 线程中的中断一样处理,如下所示:

public void msgHandler(String msg) {
    ...
}

Thread.onMessageReceived(msgHandler);
Run Code Online (Sandbox Code Playgroud)

编辑- 考虑到我原来的帖子的答案,我的问题变成:默认情况下 JVM 是否提供一个同步对象,所有线程都可以引用该对象?

java multithreading javaagents

1
推荐指数
1
解决办法
89
查看次数

SBT Native Packager 的条件 JavaAgent 命令

我正在使用 scala、sbt、sbt-native-package 以及可能的 sbt-java-agent 在运行时使用 kubernetes 有条件地激活 datadog java 代理。

通过添加dd-java-agent作为依赖项并添加脚本片段,我可以仅在特定环境下激活 datadog。变量已设置,但这也将 dd-java-agent 添加到类路径中,这是我试图避免的:

val DataDogAgentVersion = "0.70.0"

libraryDependencies += "com.datadoghq" % "dd-java-agent" % DataDogAgentVersion % "runtime"

bashScriptExtraDefines += """if [ "$DD_PROFILING_ENABLED" = "true" ]; then addJava "-javaagent:${app_home}/../lib/dd-java-agent-""" + DataDogAgentVersion + """.jar"; fi""""
Run Code Online (Sandbox Code Playgroud)

有没有办法让 sbt 管理 dd-java-agent.jar 的下载,将此 jar 包含在目录中lib(或不同的目录,如果需要的话),但从类路径中排除?

我尝试过使用sbt-java-agent它将 jar 放入dd-java-agent目录中并将 jar 从类路径中排除,但我无法弄清楚在使用该插件时如何将addJava语句包装在if检查中。

感谢您的任何帮助,您可以提供!

scala javaagents sbt sbt-native-packager datadog

0
推荐指数
1
解决办法
867
查看次数

如何在 OpenTelemetry java 中使用扩展

我正在尝试扩展 OpenTelemetry java 代理,但没有看到任何迹象表明它正在尝试加载我的 jar。我正在运行以下命令:

java -javaagent:../src/main/resources/opentelemetry-javaagent.jar -Dotel.javaagent.configuration-file=../src/main/resources/agent-prp.properties -jar simple-service-1.0-SNAPSHOT-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)

我的配置文件是(属性有效):

otel.javaagent.extensions=/Users/foo/source/simple-service/src/main/resources/span-processor-1.0-SNAPSHOT.jar
otel.resource.attributes=service.name=foooBarr
Run Code Online (Sandbox Code Playgroud)

我的扩展名是:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.trace.ReadWriteSpan;
import io.opentelemetry.sdk.trace.ReadableSpan;
import io.opentelemetry.sdk.trace.SpanProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class FooSpanProcessor implements SpanProcessor {
    private static final ObjectMapper objMapper = new ObjectMapper();
    private static final Logger log = LoggerFactory.getLogger(FooSpanProcessor.class);


    @Override
    public void onStart(Context parentContext, ReadWriteSpan span) {
        log.error("fffffffffff");
        span.setAttribute("fooToken", FooProperties.INSTANCE.fooToken);
        span.setAttribute("service.name", FooProperties.INSTANCE.serviceName);
        span.setAttribute("runtime", FooProperties.INSTANCE.javaVersion);
        span.setAttribute("tracerVersion", "0.0.1"); …
Run Code Online (Sandbox Code Playgroud)

java javaagents open-telemetry

0
推荐指数
1
解决办法
1615
查看次数