問題タブ [byteman]
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.
java - 実行時に byteman のルールを変更する方法
byteman を使用して既存のコードを変更したいリモート テスト サーバーを実行しています。
実行時にカスタム ルール ファイルを使用してバイトマンをアタッチすることは可能ですか (開始時にルール ファイルを設定する必要がありますが、これはほとんどの場合柔軟ではありません)。
サーバーの起動時に -javaagent を追加せずに実行中のサーバーにアタッチすることは可能ですか?
java - byteman を使用したメソッド引数の変更
以下に示すようなクラスがあります
caller.invoke("suman");
メソッド呼び出しをキャプチャし、引数「suman」を「suman1」に変更するbyteman ルールを書きたかったのです。つまりcalle.invoke(arg);
、Caller
クラスの引数は「suman1」として来る必要があります。byteman ルールを使用して引数をキャプチャしようとしましたが、引数を変更する方法がわかりません。
助けていただけますか?
junit - Byteman JUnit Runner - 自動クローズされた InputStream#close で IOException をトリガーできない
私は次のコードを持っています:
私が与える(有効な)入力ストリームが閉じていると思われるときに、Byteman Junit RunnerでIOExceptionをトリガーしようとしています:
私のテストは失敗します: エラーは常に空です。これは明らかに Byteman ルールが実行されていないことを意味します (エージェントによって十分にロードされているため、何が起こっているのかわかりません)。
try-with-resources を介して呼び出された close メソッドで IOException をトリガーするにはどうすればよいですか?
java - Byteman - 特定のパッケージ内のすべてのクラスとメソッドをトレースします
Byteman を使用する場合、ルール構文でクラスとメソッドを指定する必要があります。Byteman を使用してプログラムの実行を追跡したい場合はどうすればよいですか?
例: プログラムの機能を実行するときに、どのメソッドが実行されているかわかりません。機能の実行中に呼び出されたメソッドを特定したい。
これは、特定のパッケージ内の各クラスの各メソッドにルールを追加する必要があるということですか? または、これを達成する他の方法はありますか?
java - Byteman が Wildfly 8.1.0 の起動を妨げていますか?
私の wildfly 8.1.0 サーバーが起動すると、クラスのインスタンスが作成されます。
それが起こっているかどうかはわかりませんし、ソース コードを変更することもできないので、Byteman を使用してこれを達成しようと考えました。
Byteman 用にこのルール ファイルを作成し、次の場所に保存しましたC:\app\ECLSManagedConnectionFactory.btm
。
Byteman をダウンロードして解凍しましたC:\byteman-3.0.3
。
私は自分を変更し、java_opts
起動時にwildflyに値をエコーさせました:
上記の 2 行目と 3 行目が存在しない場合、サーバーは正常に起動しますjava_opts
が、それらを追加した瞬間、サーバーは単に起動しません。何が起こっているかを示すものは、stdout または stderr にはありません。server.log
詳細を確認するようにというメッセージが表示されますが、そのファイルは存在しません。
私は何を間違っていますか?パスのスラッシュ方向のすべての組み合わせを試しました(重要な場合はWindows 10で)。
誰かが実際にこのbyteman
ツールを使用していますか? Stack Overflow にタグがなく、オンラインで入手できる情報がほとんどないことに驚いています。
mule - ByteBuddy 1.10.2 が「java.lang.IllegalStateException: Cannot resolve type description for java.lang.Exception」などをスローする
の変換をインストールするときにエラーCannot resolve type description
が表示されます。AgentBuilder.Listener.onError(...)
AgentBuilder
Instrumentation
エージェント コードは次のとおりです。
これは、ターゲット アプリケーションとして Mule 4 (jdk1.8) で ByteBuddy v1.10.2 を使用しています。
この同じ問題に関する同様の投稿がここにありますが、回答から解決策が得られませんでした。
出力には「from bytebuddy: agent premain」と表示されますが、「from bytebuddy: transform」とは表示されません。代わりに、ログには、次のようなブートストラップ クラス ローダーに属する多くのクラスの例外が表示されます。
型の説明を照会しているクラス ローダーが、目的のクラスを提供していないようです。ClassFileLocator
これらのルックアップの代替を指定する方法はありますか?
エラーの原因となっている特定のクラス ローダーは次のとおりです。
org.mule.runtime.module.artifact.api.classloader.MuleArtifactClassLoader
興味深いことに、このインストルメンテーションは、エージェントとして Byteman を使用すると、次のルール ファイルで期待どおりに機能します。
アドバイスをいただければ幸いです。ご協力ありがとうございました!
bytecode-manipulation - Byteman 実装の詳細
AT/AFTER nth read、AT/AFTER nth write などの追跡変数のような場合に特にどのように機能するかを理解するために、バイトマンの実装を調べていました。実装では、指定されたルールと一致するかどうかを確認するために、クラスを 2 回読み取ります。ユーザーが RuleCheckMethodAdapter を使用し、2 回目は RuleTriggerAdapter を使用してクラス内の関心のある場所に実際にバイトコード (トリガー) を挿入します。私が理解できなかったのは、なぜ 2 つのパスが必要なのかということです。ルールに一致する場合、最初のパス自体でトリガーを追加できないのはなぜですか? 同じことに関する洞察は役に立ちます。