使用Attach Api时出错

时间:2013-01-12 08:10:37

标签: java instrumentation agent attach-api

在Eclipse中使用attach API时会在控制台中抛出错误。

为了使用附加API我在eclipse中安装了JRE,然后在当前JRE的外部jar选项中使用了包含tools.jar的编辑选项。

但是当我尝试执行一个简单的程序,例如

时,它会抛出以下错误
  

java.lang.UnsatisfiedLinkError:java.library.path中没有附加   com.sun.tools.attach.AttachNotSupportedException:没有提供者   安装在   com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:190)     在dynamicLoadingTest.VMAttach.main(VMAttach.java:17)

这是执行的简单程序。     import java.io.IOException;

import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.VirtualMachine;

public class VMAttach {


    public static void main(String[] args) {


        try {
            VirtualMachine vm = VirtualMachine.attach("6832");
        } catch (AttachNotSupportedException e) {
            System.out.println("This error");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

提到的进程ID 6832 是在系统上运行的Java应用程序

将安装的jre更改为jdk后会产生错误

Exception in thread "main" com.sun.tools.attach.AttachNotSupportedException: jvm.dll not loaded by target process
    at sun.tools.attach.WindowsVirtualMachine.<init>(WindowsVirtualMachine.java:46)
    at sun.tools.attach.WindowsAttachProvider.attachVirtualMachine(WindowsAttachProvider.java:52)
    at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:195)
    at dynamicLoadingTest.VMAttach.main(VMAttach.java:17)

3 个答案:

答案 0 :(得分:9)

实际上,当您的系统中有不同的jdks并且所有jdks都包含在类路径中时,会出现此问题。

答案 1 :(得分:3)

对我来说,解决方案是将attach.dll从JDK(与JRE相同的版本)放入JRE的bin目录。

答案 2 :(得分:1)

我尝试使用JDK1.7,它运行正常。使用JDK1.6时,问题仍然存在。