問題タブ [jvmti]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
207 参照

java - JVMTIで完全なコマンドラインを取得するには?

現在の Java プロセスを起動し、JVMTI の OnLoad フェーズ中にそれを取得するために使用されたすべての引数を含む完全なコマンド ラインを取得することは可能ですか?

0 投票する
1 に答える
429 参照

java - Jcalltracer の実行方法

jcalltracer を開くのに問題があります。これは、Java プログラムをシーケンス図にリバース エンジニアリングする sourceforge のオープン ソース プログラムです。以下を JVM に追加しようとしたときにエラーが発生しました -

java -agentpath:C:\calltracer\jvmti\calltracer5.dll=traceFile-C:\calltracer\call.trace,filterFile-C:\calltracer\filters.txt,outputType-xml,usage-unmanaged -Djava.library.path =C:\calltracer\jvmti -Dcalltracerlib=calltracer5

エラー -

VM の初期化中にエラーが発生しました 絶対パスにエージェント ライブラリ C:\calltracer\jvmti\calltracer5.dll が見つかりませんでした。エラー: AMD 64 ビット プラットフォームで IA 32 ビット .dll をロードできません

私は Windows 7 x64 を使用しています。ダウンロードした Java SDK を確認し、Java バージョン チェックを行った後、x64 バージョンをインストールしたことは確かです。手がかりはありますか?

0 投票する
1 に答える
943 参照

java - g++ を使用した jvmti エージェントのコンパイルは機能しませんが、cc は正常に機能します

私は非常に単純なエージェントを持っています。基本的には必要な Agent_OnLoad メソッドの署名だけです。

g ++でコンパイルすると。

共有ライブラリを作成し、エージェントでテストを実行します

エラーが発生する

次のコマンドを使用してコンパイルすると、つまり C としてコンパイルすると、問題なく動作します。

次に、シュレッドライブラリを作成してテストします

それは正常に動作します。

問題は私が持っているコードです.cではなく実際のメソッドのcppコードです. C++ コードを使用してエージェントを作成できますか? だと思いますが、何が間違っているのかわかりません。

テスト エージェントのソースは次のとおりです。これよりはるかに単純になることはできません。

これは、ac ファイルとしてコンパイルすると問題なく動作します

これが別のバージョンです。extern「C」の提案を追加しましたが、以前と同じ結果になり、ライブラリが見つかりませんでした。

nmコマンドの出力は次のとおりです

nm コマンドからのトレースは少し異なりますが、どちらにも Agent_OnLoad が含まれています。

これは、どちらの場合も共有ライブラリを作成するために使用されるコマンド ラインです。

ldd からの出力、動作しないケース (g++)

ldd からの出力、作業ケース (gcc)

約 15 年間 Linux を使用してきましたが、LD_DEBUG=all ができるとは知りませんでした。非常に便利です。ここに興味深い出力があります

これに関してstackoverflowで検索を行ったところ、投稿でこのシンボルにグローバルを追加することが提案されたため、__gxx_personality_v0をvoid *__gxx_personality_v0として追加しました。

そして今、g ++でコンパイルすると、JVMはライブラリを見つけました。

Java,#gcc

0 投票する
1 に答える
305 参照

quartz-scheduler - JVMTI のヒントとコツ

私がやりたいのは、クォーツの力を jvmti と組み合わせることです。基本的に、私の計画は、jvmti を使用してメモリ使用量を監視し、それに基づいて、Quartz を使用して優先度に応じて que でプロセスを起動/実行することです。各プロセスを this-process-will-execute-this-amount-of-timeslice アプローチで実行して、応答しないことを防ぎ、Web 要求などのすべての着信 Java プロセスを処理できるようにしたいと考えています。

このトピックのチュートリアルはどこにも見つかりませんでした (見つけることができる最小限のものがありますが、私のような初心者には十分ではありません)。これは、C プログラミングと Java プログラミングの組み合わせです。私が現在持っているのは、c/c++ プラグインを備えた netbeans ide ですが、mingw のインストールはまだ完了していませんが、これと orasun の jvmti の参考資料を処理できると思います。

何をすべきか教えてもらえますか?ツール?参考資料?見て/チェックアウトできる既存の同様のプロジェクトはありますか? 私はこれをスピードアップしたいだけで、ここに誰かがこのような経験をしているなら、彼女/彼の経験を共有したいと思います.

乾杯!

0 投票する
1 に答える
120 参照

java - JVMTIがロードされていません

C++で小さなJavaデバッガーを作成するためにJVMTIを使用しようとしています。私はここを読みました:http:
//java.sun.com/developer/technicalArticles/Programming/jvmti/
そのJVMは次のように定義されたエクスポートされたメソッドを呼び出す必要があります
JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)

しかし、Javaターゲットプログラムを起動しても、デバッガーを実行するとこのメソッドが呼び出されません。
これは、このJVMTIを開始する正しい方法ですか?Javaプログラムの起動時に自動的に呼び出されることになっていますか?

0 投票する
1 に答える
1117 参照

java - JVMTIを使用してJavaオブジェクトのメモリアドレス(ハッシュコードではない)を取得する方法

私はCおよびC++の初心者であり、JVMTIの使用方法がよくわかりません。Javaオブジェクトの物理メモリ位置(16進数)を取得したい。出来ますか?「このプロファイラーなどから取得する」などの回答は取得したくありません...これまでのところ、Linuxターミナルでこのコマンドを使用しています。

libDLL.soは、Javaアプリケーションで実行するcを使用して作成しているライブラリです。それは実際に機能し、私のコードで実行されますが、必要なデータを取得する方法がわかりません。

たとえば、私は次の単純なコードを使用しています。

作成するすべての新しい整数配列のメモリ位置(0x ...)を取得したい... jvmtiを使用して素敵なサンプルコードを取得できれば、とてもうれしいです。

0 投票する
1 に答える
504 参照

reflection - JNI / JVMTI の使用 - jfieldID が静的かどうかを判断する方法

使用する場合jvmti_env->GetClassFields(objClass, &numOfFields, &fieldIds);でも、GetStatic<Type>Field と Get<Type>Field のどちらを呼び出すかを決定する必要があります。どちらを使用するかを決定するにはどうすればよいですか? java.lang.reflect.Field では、静的フィールドの修飾子を照会できることを知っています。

ここで回避策を見つけました: http://zoo.cs.yale.edu/classes/cs433/programming/examples-java-socket/jdk1.5/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp
しかし私は JVM からのソリューションを好みます。
ありがとう!

0 投票する
3 に答える
2334 参照

java - JDI: デバッガーのように Java アプリケーション (JVM) を一時停止する方法

実行中の任意の時点で JVM を一時停止する可能性のある JDI API を探しています。BreakPointRequest createBreakpointRequest メソッドを見ると、特定の場所が必要です。ブレークポイントを作成するために渡すことができる現在の場所を取得するために、場所を必要としない、または何らかの形で他の API はありますか。

私は基本的に、アプリケーションをアタッチして一時停止し、JVMTI エージェントを使用して BreakPoint イベントのコールバックを受け取り、さらに処理を実行する方法を探しています。ありがとう

0 投票する
2 に答える
3613 参照

java - Javaのオブジェクトインスタンスを一意に区別する方法

現在、Java 1.7 用のネイティブ JVMTI エージェントを構築しています。問題は、特定の Java オブジェクト インスタンスに関するデータのインデックスを作成する必要があることです。私の質問は、jobject 型の値をオブジェクトのインスタンス ID として使用して、インデックス付きデータを取得できますか?

jobject タイプのセマンティクスについての情報を探しています。オブジェクトのメモリ位置へのポインタですか? スタックポインタアドレスですか?JVMの内部構造へのアドレスですか?したがって、jobject の値が一意であり、Java オブジェクトの寿命に沿って不変であるかどうかはわかりません。

ご協力いただきありがとうございます。

編集

ここにあるJNIの仕様によると、jobjectはオブジェクトのインスタンスへのポインタのようです。

0 投票する
2 に答える
2885 参照

java - jvmtiオブジェクト割り当てコールバックの動作に困惑

jvmが一部のJavaオブジェクトを割り当てたが、他のオブジェクトは割り当てないのに、なぜコールバックを取得できるのか、誰かに説明してもらえますか?これが私がしていることです:

作成したファイルを調べると、関心のあるクラスが表示されませんが、それらが存在することはわかっており、NetBeansはjvmにそのクラスのインスタンスが1つだけあると言っています。何かご意見は???

ニキータ