Eclipse 如何调试在本地代码创建的JVM中运行的Java代码?

Eclipse 如何调试在本地代码创建的JVM中运行的Java代码?,eclipse,debugging,jvm,java-native-interface,Eclipse,Debugging,Jvm,Java Native Interface,如何使用Eclipse调试在自己的C++创建的JVM中运行的Java代码? 我有一个本机应用程序执行以下操作: JavaVM *javaVM; JNIEnv *jniEnv; long flag = JNI_CreateJavaVM(&javaVM, (void**) &jniEnv, &vmArgs); jclass jcls = env->FindClass("my/namespace/Demo"); // then run code [...] 我从那里运

如何使用Eclipse调试在自己的C++创建的JVM中运行的Java代码? 我有一个本机应用程序执行以下操作:

JavaVM *javaVM;
JNIEnv *jniEnv;
long flag = JNI_CreateJavaVM(&javaVM, (void**) &jniEnv, &vmArgs);
jclass jcls = env->FindClass("my/namespace/Demo");
// then run code 
[...]
我从那里运行了一些Java代码。 我必须有一个完整的Eclipse环境和调试器,这样我才能每天在良好的条件下编写和调试Java代码

我的问题是:我如何设置

例如,在使用Visual Studio的Windows上,我可以:

    < LI>从C++应用程序中创建.NET VM
  • 编写一些C#代码从这个VM运行
  • 调试我的C代码,它将被托管在一个DLL(不是一个JAR)中,我只需要指定调试器应该启动C++应用程序可执行。当我开始调试时,会自动到达C#断点。我还可以使用
    ::DebugBreak()
    工具(或C#等效工具)
我发现唯一与我的问题有点相似的是

问题是9岁

最好的

MF


NB:请注意,我并不是试图调试java应用程序正在运行的JNI C++代码。我在问题中添加了

jni
标记,因为我怀疑jni人员可能会在这里提供帮助。

为了使用Eclipse的完整Java调试功能,您需要使用JDWP代理启动JVM,也就是说,传递以下JVM参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
JDWP需要一些只有在VM启动时才可用的JVM能力。这意味着,如果JVM在没有JDWP代理的情况下启动,则以后无法附加调试器


<>我建议设置一些命令行参数或环境变量,以指示在创建JVM之前,C++程序应该将上面的代码> AgTunLIB < /C> >参数添加到<代码> VMARGS。然后,您将能够将Java调试器附加到
address
参数中指定的端口。

为了使用Eclipse的完整Java调试功能,您需要使用JDWP代理启动JVM,即传递以下JVM参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
JDWP需要一些只有在VM启动时才可用的JVM能力。这意味着,如果JVM在没有JDWP代理的情况下启动,则以后无法附加调试器

<>我建议设置一些命令行参数或环境变量,以指示在创建JVM之前,C++程序应该将上面的代码> AgTunLIB < /C> >参数添加到<代码> VMARGS。然后,您将能够将Java调试器连接到
address
参数中指定的端口