Byteman: Tudo o que você queria
saber mas não sabia a quem
perguntar
Ricardo Martinelli
O problem a
● Encontrar problemas que só ocorrem em
produção (isso nunca acontece, né?)
● Fazer debug de problemas que não são
visíveis a olho nu
● Criar testes de concorrência (detecção de
Racing Condition)
A solução (ou quem pode ajudar a
chegar lá)
Formas de utilização
● -javaagent
● scripts shell
● Teste Unitário
Template de regra
# rule skeleton
RULE <rule name>
CLASS <class name>
METHOD <method name>
BIND <bindings>
IF <condition>
DO <actions>
ENDRULE
Pontos de interceptação
AT ENTRY
AT EXIT
AT LINE number
AT READ [type .] field [count | ALL ]
AT READ $var-or-idx [count | ALL ]
AFTER READ [ type .] field [count | ALL ]
AFTER READ $var-or-idx [count | ALL ]
AT WRITE [ type .] field [count | ALL ]
AT WRITE $var-or-idx [count | ALL ]
AFTER WRITE [ type .] field [count | ALL ]
AFTER WRITE $var-or-idx [count | ALL ]
AT INVOKE [ type .] method [ ( argtypes ) ] [count | ALL ]
AFTER INVOKE [ type .] method [ ( argtypes ) ][count | ALL ]
AT SYNCHRONIZE [count | ALL ]
AFTER SYNCHRONIZE [count | ALL ]
AT THROW [count | ALL ]
E se eu quiser interceptar classes do
java?
Antes, uma pequena aula...
● jre/lib
● jre/lib/ext
● aplicação
Classloading
● jre/lib <-- Boot Classloader
● jre/lib/ext <-- Extension Classloader
● aplicação <-- System Classloader
Demo
Links
● http://jboss.org/byteman
● https://community.jboss.org/wiki/ABytemanTutorial
● http://en.wikipedia.org/wiki/Java_Classloader
Dúvidas?
https://community.jboss.org/groups/jbug-brasil

Byteman: Tudo o que queria saber mas não sabia a quem perguntar

  • 1.
    Byteman: Tudo oque você queria saber mas não sabia a quem perguntar Ricardo Martinelli
  • 2.
    O problem a ●Encontrar problemas que só ocorrem em produção (isso nunca acontece, né?) ● Fazer debug de problemas que não são visíveis a olho nu ● Criar testes de concorrência (detecção de Racing Condition)
  • 3.
    A solução (ouquem pode ajudar a chegar lá)
  • 4.
    Formas de utilização ●-javaagent ● scripts shell ● Teste Unitário
  • 5.
    Template de regra #rule skeleton RULE <rule name> CLASS <class name> METHOD <method name> BIND <bindings> IF <condition> DO <actions> ENDRULE
  • 6.
    Pontos de interceptação ATENTRY AT EXIT AT LINE number AT READ [type .] field [count | ALL ] AT READ $var-or-idx [count | ALL ] AFTER READ [ type .] field [count | ALL ] AFTER READ $var-or-idx [count | ALL ] AT WRITE [ type .] field [count | ALL ] AT WRITE $var-or-idx [count | ALL ] AFTER WRITE [ type .] field [count | ALL ] AFTER WRITE $var-or-idx [count | ALL ] AT INVOKE [ type .] method [ ( argtypes ) ] [count | ALL ] AFTER INVOKE [ type .] method [ ( argtypes ) ][count | ALL ] AT SYNCHRONIZE [count | ALL ] AFTER SYNCHRONIZE [count | ALL ] AT THROW [count | ALL ]
  • 7.
    E se euquiser interceptar classes do java?
  • 8.
    Antes, uma pequenaaula... ● jre/lib ● jre/lib/ext ● aplicação
  • 9.
    Classloading ● jre/lib <--Boot Classloader ● jre/lib/ext <-- Extension Classloader ● aplicação <-- System Classloader
  • 10.
  • 11.
  • 12.