2

jvmti のドキュメント全体を読み込もうとしましたが、問題の解決策が見つかりませんでした。

プログラムを呼び出すためにコマンドラインで使用されるクラス/ファイルの名前を取得したい:

java -agentpath:<pathToAgent> <calledJavaProgram>

大文字で < calledJavaProgram > の名前を取得したい。

GetSourceFileName(jclass klass,...) は、パラメーターリストに設定されている「klass」の名前のみを取得しますが、プログラムを開始して以来、これもわかりません...そうですか?

この名前を取得する (他の) 方法はありますか?

あなたの助けのためのThx Markus G.

4

1 に答える 1

0

JNIのドキュメントによると、JavaVMInitArgs構造体はネイティブコードから新しいVMを作成するためのものであるため、これは非常に難しいことだと思います。AFAIKには、JVMTIまたはJavaのいずれにもコマンドライン引数へのAPIアクセスはありません。

mainメソッドを使用してクラスの名前を見つけるためにできることがいくつかあります。

  1. JNIを使​​用して、それを実行するJavaメソッドを呼び出します。
  2. BCIを使用して、すべてのメインメソッドを変更し、エージェントに対してJNIコールバックを実行します。最初に呼び出されるのは、必要なメソッドです。args[]これにより、配列を取得することもできます。
于 2012-04-15T20:22:40.753 に答える