【问题标题】:AttachNotSupportedException: no providers installed java agentAttachNotSupportedException:没有提供程序安装 java 代理
【发布时间】:2015-05-19 12:38:32
【问题描述】:

我无法将我的 java 应用程序附加到远程 java vm。 我在 Windows 7 上使用 java 8u45,我的附加代码非常简单

import java.io.IOException;
import java.util.List;
import java.util.Scanner;

import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
import com.sun.tools.attach.spi.AttachProvider;

public class AgentLoader
{
    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        String pid = s.next();

        try
        {
            VirtualMachine vm = VirtualMachine.attach(pid);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

当调用 attach 时,我得到 AttachNotSupportedException 并且没有安装提供程序。 我在网上浏览了一些答案,发现很少有对我不起作用的解决方案。 比如确保我不会在同一台机器上混合几个版本的 java。 将 PATH 变量设置为指向位于 %JAVA_HOME%\jre\bin 中的 attach.dll 库 等等。

它们都不适合我

知道可能是什么问题吗? 谢谢

【问题讨论】:

  • 远程是指在同一台机器上的东西还是在不同的机器上?
  • 在同一台机器但在不同的java进程中
  • 你正在为正在运行的进程传递正确的 PID,我尝试了相同的代码并传递了 eclipse 运行的 pid,我可以看到它正在附加
  • 是的,进程id和想要的进程一样。请记住,我不想将它附加到我自己的进程(从 eclipse 运行),而是附加到另一个 java 进程
  • 你能提供完整的堆栈跟踪吗?

标签: java exception instrumentation javaagents


【解决方案1】:

包含以下代码行,它应该可以工作。它需要 attach.dll 文件才能工作。

static
{
   System.loadLibrary("attach");
}

【讨论】:

    【解决方案2】:

    将 IDE 的 jre 依赖项从 jre 更改为 jdk。 至于eclipse,Window -> Preferences -> Java -> Installed JREs,把jre换成jdk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-20
      • 2022-07-04
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多