2017年1月2日月曜日

Bytemanチュートリアル(日本語意訳)
なぜ Byteman を使ったほうがいいの?

Byteman (http://byteman.jboss.org/docs.html)のチュートリアルを日本語意訳したものです。


Byteman を使用すると、ソースコードの修正や再コンパイルすることなく Java プログラムを操作する事ができます。また、プログラムを再実行せず Java アプリケーションの振る舞いを変更する事ができます。自作アプリケーションのクラスや、String や Thread といった JVM の基本クラスの振る舞いを適切に再定義することもできます。

Byteman の最もシンプルな使用例は、プログラムの処理状況を可視化するようコード内に print 文を挿入することです。public、private、protected フィールド変数やローカル変数を参照/出力することができます。また参照したプログラム内の値を処理するために、さらにアプリケーションのメソッドを呼び出すこともできます。
Byteman では、特殊かつ局所化された変更を行うのでアプリケーションに対するオーバーヘッドは少ししか発生しません。これはタイミング依存のコード、特にマルチスレッド・アプリケーションにて同時並行スレッドで生じる特殊なイベントのデバッグに非常に便利です。また、プログラム停止を伴ってデバッグすることができない、本番稼働中のアプリケーションへオーバーヘッドを生じさせずデバッグや監視することもできます。

Byteman はプログラムの制御フローの変更もできます。アプリケーションやランタイムの状態を変えるよう、アプリケーションもしくは JVM のメソッド呼び出しを注入することができます。
また、「static フィールド(静的変数)や instance フィールド(インスタンス変数)」、メソッドの「引数とローカル変数」、メソッド内で「強制的にリターン(復帰)させたり、例外をスローさせる」といった入れ替えもできます。こちらは通常、テストにてエラー状況をシミュレートするために利用されます。アプリケーション内に計測用のコード(instrumentation code) や不正な振る舞いをさせるダミー class を実装して複雑にせず、怪しい挙動を確認したい的確なポイントに簡単にJavaコードを注入できます。

Byteman で操作する Java アプリケーションは Java 6 以上の JVM で実行するようにしてください。もし、古い Java を使用してコンパイルされたコードであっても、心配の必要はありません。
ただ、Byteman では JDK6上でのみフルサポートされている JVM 関数を採用しています。アプリケーションをどうしても Java 5 で実行する必要がある場合、Byteman のレガシーリリース 1.0.3 を使うこともできます。なお、1.0.3 はこのチュートリアルで紹介する基本機能を提供していますが、Byteman エージェントと Byteman ルールの動的ロードはサポートしていません。(詳細は 1.0.3 のユーザーズガイドを確認してください)

0 件のコメント:

コメントを投稿