2017-03-04 60 views
0

如何使用Eclipse調試在我自己的C++ - 創建的JVM中運行的Java代碼? 我有一個本地應用程序做以下幾件事:如何調試在本機代碼創建的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代碼在良好的條件,每天的基礎上。

我的問題是:我怎麼能設置的東西嗎?

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

  • 從C++應用程序
  • 寫一些C#代碼從該虛擬機上運行中創建.NET VM。
  • 調試我的C#代碼,這將在一個DLL(而不是JAR明顯)主辦,我只需要指定調試器應啓動C++應用程序的可執行文件。我開始調試時會自動達到C#斷點。我也可以使用::DebugBreak()工具(或C#等價物)。

我發現的唯一的事情就是遠程相似,我的問題是

Debug a java application without starting the JVM with debug arguments

,問題是9歲。

最佳,

MF

注:請注意,我不是要調試JNI C++代碼,正在從一個Java應用程序運行。我在我的問題中添加了jni標記,因爲我懷疑JNI人員可能會在此處提供幫助。

回答

2

爲了使用Eclipse的完整的Java調試功能,你需要使用JDWP代理啓動JVM,即,通過以下JVM參數:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999 

JDWP需要一些JVM TI cababilities這僅適用於VM啓動。這意味着如果在沒有JDWP代理的情況下啓動JVM,則不能在後面附加調試器。

我建議設置一些命令行參數或環境變量,以表明您的C++程序應該在創建JVM之前將以上agentlib參數添加到vmArgs。然後您將能夠將Java調試器附加到參數address中指定的端口。