問題タブ [javaagents]

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 投票する
1 に答える
482 参照

java - Java エージェントの興味深い用途は何ですか?

Java 5 以降では、クラス ローダーに Java エージェントを追加するオプションがあります。

エージェントを書いたことがありますか? エージェントを使用したことがありますか?エージェントの興味深い用途は何ですか?

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

debugging - デバッガーは JMockit では動作しません

ここで誰かにとって簡単な質問であることを願っています.....

私は RAD 7.5.2 を使用しており、Junit テストを作成しています。私は JUnit 3 で問題なく記述していましたが、いくつかの関数呼び出しをモックアップしたいと考えました。そこで、jmockit 0.9.7 と Junit 4.6 をロードしました。VM 引数として -javaagent:jmockit.jar も含めます。

「Run As Junit Test」を実行しても、まったく問題はありません (少なくとも、出力には何も表示されません)。Junit の出力は良好で、コンソールにエラーは出力されません。

「Junit テストとしてデバッグ」すると、動作しません。それは私を次のように捨てます:

InstrumentationImpl.class --> ソースが見つかりません

...そして、続けるをクリックすると....

NativeMethodAccessorImpl.class --> ソースが見つかりません

...そして、続行をクリックすると...

JUnit はこの後終了します。以下をコンソールにダンプします。


スレッド「メイン」での例外 java.lang.reflect.InvocationTargetException での sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) での sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) での sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl) .java:43) at java.lang.reflect.Method.invoke(Method.java:618) at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:160) 原因: java.lang.UnsatisfiedLinkError: sun/instrument/ InstrumentationImpl.redefineClasses0([Ljava/lang/instrument/ClassDefinition;)mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:197) で sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:98) の V。再定義エンジン。mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:116) の redefineMethods(RedefinitionEngine.java:184) mockit.internal.RedefinitionEngine.setUpInternalStartupMock(RedefinitionEngine.java:53) の mockit.internal.Startupload.InternalStartupMocks(Startup.java) :123) mockit.internal.Startup.initialize(Startup.java:110) at mockit.internal.Startup.premain(Startup.java:97) ... 5 もっと見る

致命的なエラー: -javaagent の処理に失敗しました


テストで JUnit 3 と JUnit 4 の両方を問題なく実行できます。-javaagent:jmockit.jar を使用すると (デバッガーを使用します。それ自体は問題ありません)、問題が発生するため、それを実行する必要があります。 jmockitのものを使用します。

考え?

0 投票する
4 に答える
51777 参照

jvm - 複数の Java エージェントを使用して Java プログラムを開始するにはどうすればよいですか?

Java エージェントを使用して Java プログラムを開始する方法を認識しています。

しかし、2 つ以上の Java エージェントを追加してプログラムを計測したい場合はどうすればよいでしょうか? JVM にロードする必要があるすべてのエージェントに対して、java -javaagent:... を再度呼び出したくありません。

私はこのようなことを試しました:

またはこのようなもの:

しかし、成功していません。

私の問題を解決する答えはありますか?

ありがとうございました。

0 投票する
4 に答える
2288 参照

java - Javaagent クラスのアンロード

バイトコードを計測する Java エージェントがあります。Java 6 でアタッチ API を使用して、ユーザーが Java エージェントを使用してエージェントとインスツルメントおよびインスツルメンテーション コードを動的にロードできるようにしています。Boot-Class-Path マニフェスト属性を使用して、javagent クラスがブート クラスパスにあることを確認し、ユーザーが ArrayList などのクラスを計測できるようにしています。

ただし、バージョン管理には問題があります。ユーザーがエージェントのバージョン 1 を動的にアタッチするとします。次に、彼にバージョン 2 を渡しました。彼が私のエージェントのバージョン 1 をアタッチして以来、彼のアプリケーション サーバーはシャットダウンされていないため、バージョン 1 のクラスがまだロードされています。

私のクライアント バージョン 2 の javaagent がバージョン 1 をアンロードするような方法が必要です。

javaagent のクラスの顧客クラスローダを作成し、クラスローダの参照を null に設定する方法があることはわかっています。ただし、その場合、クラスローダーはブートクラスローダーの階層の下にあるため、ブートクラスパスでクラスを計測することはできません。したがって、ユーザーは ArrayList のようなクラスを計測できません。エージェントのクラスのメソッドは、ブート クラス ローダーからは見えません。

ブート クラスパスの問題を解決し、以前のエージェントのクラスをアンロードする方法はありますか?

0 投票する
4 に答える
18693 参照

java - プログラム開始後のJavaエージェントの開始

同じVM内から仮想マシンの起動後にjavaagentを挿入することはできますか?

たとえば、適切なメタデータが設定され、agentmainメソッドがすでに実装されているエージェントがjarmyagent.jarにあるとします。ここで、ユーザープログラムはAPI呼び出しを呼び出します。これにより、クラスが再定義できるようにエージェントが挿入されます。

それはどのように行うことができますか?

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

c# - C# の -javaagent に相当しますか? または: C# で Java フレームワークを使用する方法

これはおそらく自分で理解できるはずですが、運があまり良くないので、質問することにしました。

問題: 私はシステムを Java から C# に変換していますが、システムの最も複雑な部分を処理してくれるので、私が本当に使いたいJava フレームワークを使用しています。このフレームワークのソース コードがあります。

C# で Java ライブラリを使用する可能性がいくつかあることは知っています (ただし、それらのどれにも詳しくないので、提案をいただければ幸いです)。これまでのところ、IKVM.NETを使用して .dll を生成することを考えてきましたが、次に何をすべきかわかりません。Java では、コードでフレームワークを実行するためにオプション -javaagent を使用する必要があるためです。追加することによって

-javaagent:bin/deuceAgent.jardeuceAgentフレームワークはどこにありますか)

あなたのJavaコマンドラインに。.dll を取得した後、C# で同等のものが何であるか、または同等のものがあるかどうかはわかりません。

何か助けはありますか?本当にありがとう。

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

java - Java エージェントは別のスレッドで実行されますか?

これは知っておくべきことだと思いますが、Java エージェント (-javaagent で指定) は別のスレッドで実行されますか? Javaエージェントは、JVMに埋め込まれて実行され、クラスロードプロセスをインターセプトするプラグ可能なライブラリであると読みましたが、確認したいのですが、本当にそれらをインターセプトしますか(別のスレッドで実行され、クラスのロードを監視しているように聞こえます)それともJVMから通知されますか(JVMはそれを呼び出してクラスの負荷を解決します。別のスレッドはありません)?

繰り返しますが、私はそれを理解できるはずだと感じていますが、私に優しくしてください。

ありがとう!

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

metaprogramming - 定型文を削減するためのメタモルフィック コードの使用

定型コードを削減するために使用されるメタモルフィック コード、つまり、命令 (IL と Java バイトコード、およびネイティブ コードを含む) を生成して実行するコードを見た人はいますか?

アプリケーションや言語に関係なく、通常、データベースから行を取得してオブジェクトのリストを返すデータベース コードがいくつかあります。もちろん、データベース コネクタに基づいてこれを行う方法は無数にあります。インデックスによって行のセルにアクセスすることになるかもしれません ("SELECT Name, Age" を "SELECT Age, Name" に変更するとコードが破損し、さらにインデックスによって意味がわかりにくくなるため)、myObject.Age = resultRow を使用することになります。 getValue("Age") (厄介です。これは、すべてのフィールドを調べて、列に基づいてデータを設定するだけだからです)。

データベースのテーマに沿って、LINQ to SQL は素晴らしいです。ただし、データ モデルの定義は、特にデータベースに非常に多くのテーブルがあり、SSMS がオブジェクト ブラウザーにすべてのテーブルを一覧表示できない場合は、それほど優れた方法ではありません。また、私が嫌いなのは、ストアド プロシージャの作成や SQL の関与ではありません。オブジェクトをデータベースに接続するだけです。

私がインターンをしている会社の誰かが、System.Reflection.Emit で .NET リフレクションを使用する SqlCommand クラス (System one から継承) から本当に素晴らしいメソッドを作成し、フィールドを設定するメソッドを生成しました (列の名前を含む属性) を nullary コンストラクターを持つモデル オブジェクトに適用します。プログラムの特定の部分が新しいメソッドを記述するため、これは変形的であると考えます。

データベースからオブジェクトを生成するこのパターンは、ほんの一例です。私が 2 日前に見つけたのは、SWT のデータバインディングのサポート (JFace 経由) でした。setAddress(Address address) と getName() を使用してこれらの完全にクリーンなモデルを作成しましたが、PropertyChangeSupport ファイアーを使用してセッターを汚染し、PropertyChangeSupport インスタンスを持ち歩く必要があります (抽象基本クラスにある場合でも)! その後、 PojoBindablesを見つけました。今では、書く必要が減ったという理由だけで、レベル 80 のデータバインダーのように感じています。

具体的には、このようなものやJava エージェントでネイティブ コードを使用するものは非常に便利です。

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

classloader - Java結果1エラーを解決する方法

JVMTI エージェントを使用するコンテキストで「Java 結果 1」の 1 つの特定のフレーバーを解決するにはどうすればよいですか?

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

java - エージェントを jar にパッケージ化せずに -javaagent を使用する

java -javaagent:myagent.jar some.package.Mainエージェントを jar にパッケージ化せずに実行することは可能ですか? 何かのようなものjava agent.MyAgent some.package.Main

エージェントのソース コードがあり、それをデバッグして後で変更できるようにしたいので、まったく使用する必要がなく、代わりにGUI を介して実行することを-javaagent選択します。some.package.Main

BTraceは、PID を使用して実行中のプロセスに接続するか、または を使用してプロセスに接続できます-javaagent。最初のアプローチ(PIDを使用)に似たものを探していますが、プロセスを最初から開始することもできます。