読者です 読者をやめる 読者になる 読者になる

nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

Bytemanクイックリファレンス

jboss

JBoss Advent Calendar 2011の26日目のエントリです。Bytemanの組み込み変数とかすぐ忘れてしまってBytemanのリファレンスPDFドキュメントを開くハメになることが多いので主要な部分を抜き出してみました。

基本構造

RULE
CLASS
METHOD
HELPER
AT
BIND
IF
DO
ENDRULE

ルールリファレンス

  • CLASS
    • CLASS
    • INTERFACE
    • サブクラスもターゲットにしたい場合は^を付与して ^ または ^
  • METHOD
  • AT
    • AT ENTRY|EXIT|LINE|READ|WRITE|INVOKE|SYNCHRONIZE|THROW
    • AFTER READ|WRITE|INVOKE|SYNCHRONIZE|THROW

変数リファレンス

  • $this
    • Javaのthisと一緒
  • $0
    • $thisと一緒
  • $1, $2, $3...
  • $!
    • リターン値、AT EXITかAFTER INVOKEのみ有効
  • $^
    • スローされた例外、AT THROWで有効
  • $#
  • $*
    • $0, $1, $2...の配列表現
  • $@
    • 呼び出し対象メソッドに対する$0, $1, $2...の配列表現、AT INVOKEで有効
  • $foobar
    • 同名の変数参照

その他注意点

  • パラメータ数
    • METHODにパラメータを定義せず、メソッドパラメータ変数$1, $2, $3をDOの中で利用している場合、メソッドパラメータ数が一致してないとトリガされない
  • ローカル変数の変数名による参照

有効にするときのShell Script

BYTEMAN_HOME=/path/to/byteman-download-1.6.0
BYTEMAN_RULE=/path/to/byteman.rule
BYTEMAN_OPTS="-javaagent:$BYTEMAN_HOME/lib/byteman.jar=listener:true,boot:$BYTEMAN_HOME/lib/byteman.jar"
if [ "x$BYTEMAN_RULE" != "x" ]; then
   BYTEMAN_OPTS="${BYTEMAN_OPTS},script:$BYTEMAN_RULE"
fi
BYTEMAN_OPTS="$BYTEMAN_OPTS -Dorg.jboss.byteman.transform.all -Dorg.jboss.byteman.debug"

JAVA_OPTS="$BYTEMAN_OPTS $JAVA_OPTS"