2017-03-04 3 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コードの一部を実行します。 Javaコードを良い状態で毎日作成してデバッグできるように、Eclipse環境とデバッガが完全に壊れていることが重要です。

私の質問は次のとおりです。どのように設定することができますか?例えば

は、Visual StudioにWindows上で、私がすることができます:

  • が、このVMから実行するためにいくつかのC#コードを記述するC++アプリケーション内
  • から.NET VMを作成します。
  • DLL(JARではなく)でホストされるC#コードをデバッグするには、デバッガがC++アプリケーションの実行ファイルを起動するように指定する必要があります。デバッグを開始するとC#ブレークポイントに自動的に到達します。 ::DebugBreak()施設(または同等のC#)を使用することもできます。

私の質問にリモートで類似している私が見つけた唯一のものは

Debug a java application without starting the JVM with debug arguments

で、質問は9歳です。

ベスト、

MF

NB:私は、Javaアプリケーションから実行されているJNI C++コードをデバッグしようとしているわけではないことに注意してください。私は、JNIの人々がここで助けることができると思われるので、私の質問にjniタグを追加しています。

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

JDWPのみで入手可能ないくつかのJVM TIのcababilitiesが必要です。

答えて

2

は、Eclipseの完全なJavaデバッグ機能を使用するには、JDWPエージェントとJVMを起動する必要があり、それは、次のJVM引数を渡していますVMの起動。つまり、JVMがJDWPエージェントなしで起動された場合は、後からデバッガをアタッチできません。

JVMを作成する前に、C++プログラムがagentlib引数をvmArgsに追加する必要があることを示すために、コマンドライン引数または環境変数を設定することをお勧めします。すると、パラメーターで指定されたポートにJavaデバッガーを接続できます。

関連する問題