Überprüfen Sie unsere Online -Demo .
Bixie ist ein statisches Analysetool, das Inkonsistenzen in Java -Bytecode erkennt. Eine Inkonsistenz tritt auf, wenn Code eine Ausnahme auswerfen muss oder nicht erreichbar ist, da aufgrund anderer Aussagen Annahmen getroffen werden.
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
In diesem Beispiel von Hive ist operator.getName() nicht mit dem bedingten operator == null vereinbar.
In diesem Beispiel von Cassandra:
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
Es gibt eine Inkonsistenz in der Bytecode, da die Expression identityDistribution.next() % 1 == 0 als bedingte Wahl in der Bytecode erscheint, und ein Fall ist nicht erreichbar, da identityDistribution.next() % 1 einen konstanten Wert zurückgibt.
Bixie verwendet Gradle, um zu bauen:
git clone https://github.com/SRI-CSL/bixie.git
cd bixie
./gradlew shadowJar
Um zu überprüfen, ob alles funktioniert, führen Sie Bixie auf sich selbst aus:
cd build/libs/
java -jar bixie.jar -j ../classes/main/
Für Ihre Bequemlichkeit gibt es ein Python -Skript (Runner/Runner.py), das automatisch bestimmt, welche Klassenpfade verwendet werden und wo Klassendateien generiert werden, und dann auf Bixie aufgerufen werden. Es funktioniert für Projekte, die mit Ameisen, Maven oder Gradle gebaut wurden. Zum Beispiel:
cd <path-to-project>
mvn clean
python <path-to-bixie>/runner/runner.py -- mvn compile
Dieser Befehl führt den Maven -Build -Prozess für das Projekt aus und kratzt seine Ausgabe für Fälle, in denen Javac aufgerufen wurde, und füttert diese Informationen dann an Bixie. Stellen Sie sicher, dass Sie vor dem Erstellen reinigen, da das Tool nur Dateien erkennen kann, die tatsächlich kompiliert wurden, während es beobachtet.
Bixie ist nicht solide. Viele Java -Merkmale wie Parallelität und Reflexion werden von Bixie nicht behandelt und können zu Fehlalarmen führen. Bixie erkennt manchmal auch Inkonsistenzen im Bytecode, die im Quellcode keine entsprechende Inkonsistenz haben. Zum Beispiel führen bedingte Auswahlmöglichkeiten mit Konjunktionen in der Bedingung manchmal Fehlalarme aus.