2016-06-29 26 views
0

Ich bin auf der Suche nach einer Art zu zählen, wie viele verschiedene Objekte innerhalb einer Methode mit ByteBuddy für Byte-Code-Analyse aufgerufen werden. Ich habe das mit String Parsing versucht, aber das ist absolut unmöglich. Außerdem habe ich über AST nachgesehen, aber ich sollte den Code vorher erstellen, was viel Zeit kosten würde. Daher wäre es besser, wenn ich einen Agenten erstellen könnte.Agent zum Zählen von Objekten innerhalb von Methoden mit ByteBuddy

den folgenden Code Gegeben:

@Test 
public void myMethod(){ 
    Boolean myObj = false; 
    assertTrue(myObj).isTrue(); 
    assertTrue(myObj2).isTrue(); 
} 

Der Ausgang für die Analyse für dieses Verfahren wäre: (myObj, myObj2). Da ich neu in JavaBuddy bin, wäre mein Ansatz dazu:

Erstellen Sie einen Element-Matcher, der für mit @Test annotierte Methoden finden würde. Abfangen .... hier ist das Problem: Ich weiß nicht, wie ich diese Objekte zählen oder Methodenanweisungen durchlaufen sollte.

Kann jemand mir einige Links über es oder Proben geben?

Antwort

1

Um den Code innerhalb einer Methode zu instrumentieren, können Sie mit Byte Buddy ASM verwenden, um den Code instruktionsweise zu instrumentieren. Der Grund dafür ist, dass ASM bereits eine sehr gute API für die Byte-Code-Verarbeitung ist und es keinen vernünftigen Grund gibt, sie durch etwas zu ersetzen, das am Ende ähnlich ist. Wenn Sie mehr über ASM erfahren möchten, bietet their webpage eine großartige Dokumentation.

Nichtsdestoweniger, was Sie beabsichtigen, ist ziemlich komplex zu tun. Sie müssen im Grunde dem Kontrollfluss der Methode folgen, um zu sehen, welches Objekt welcher Variablen zu welchem ​​Zeitpunkt zugewiesen ist. Außerdem können einige Klassen nicht instrumentiert werden, wie beispielsweise die Boolean Klasse, weshalb ich Ihnen empfehlen würde, einen anderen Ansatz für Ihr Problem zu finden.