Ha, tak nemusim nic kodovat, nekdo to udelal za me :-)
http://www.javacodegeeks.com/2012/02/manipulating-java-class-files-with-asm_22.html
Ten priklad je trosku komplikovanejsi, protoze loguje navraty z metod (tj. kazdou instrukci *return) a navic jen u metod s nastavenou anotaci. Ale uprava je jednoducha - to checkovani anotace uplne vyhodit :-) [no pozor na rekurzi] a posunout volani
methodNode.instructions.insertBefore(insn, endList);
Mna zujal ten byteman. Len okrem ukazok UnitTestov na ich strankach neviem nic najst. Budete sa mu venovat viacej? Ma to aj nejake ine vyuzitie ako len na vlozenie logovania alebo testovanie? Lebo oni to v prezentaciach hlavne propaguju len ako perfektnu vec na ladenie a testovanie.
Ano, bytemanem se budeme zabyvat podrobneji, uz jen proto ze Andrew Dinn je muj kolega a neodpustil by mi, kdybych mu bytemana ignoroval :-)
Dalsi use casy:
1) trasovani programu s mnoha vlakny, coz nelze udelat z debuggeru
2) zjistovani problemu v dlouhotrvajicich aplikacich,napriklad v JBossu bezicim (klidne i na produkcnim) serveru, kam se da jednou za cas nahrat par pravidel, ziskat vysledky a zase ty pravidla bez zastaveni oddelat.
3) zjisteni statistik o cemkoli na pozadani (co se otevira za sockety, fily atd.) - opet v runtime bez restartu
4) patchovani proprietarniho kodu :-) [uz se to nekolikrat delalo, napriklad zprasenej JDBC ovladac od firmy M.*t]
5) chysta se propojeni systemtapu a bytemana, to bude myslim hoodne zajimave reseni