Verifique nossa demonstração online .
Bixie é uma ferramenta de análise estática que detecta inconsistências no Java Bytecode. Uma inconsistência ocorre quando o código deve lançar uma exceção ou inacessível porque devido a suposições feitas por outras instruções.
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
Neste exemplo, do Hive, operator.getName() é inconsistente com o operator == null .
Neste exemplo de Cassandra:
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
Existe uma inconsistência no bytecode porque a expressão identityDistribution.next() % 1 == 0 aparece como uma escolha condicional no bytecode, e um caso é inacessível porque identityDistribution.next() % 1 retorna um valor constante.
Bixie usa o gradle para construir:
git clone https://github.com/SRI-CSL/bixie.git
cd bixie
./gradlew shadowJar
Para verificar se tudo está funcionando, execute Bixie por si mesmo:
cd build/libs/
java -jar bixie.jar -j ../classes/main/
Para sua conveniência, existe um script python (corredor/runner.py) que determinará automaticamente quais caminhos de classe usar e onde os arquivos de classe são gerados, e depois invocará o Bixie. Funciona para projetos construídos com ANT, Maven ou Gradle. Por exemplo:
cd <path-to-project>
mvn clean
python <path-to-bixie>/runner/runner.py -- mvn compile
Este comando executará o processo de construção do Maven para o projeto e raspará sua saída para instâncias em que o JAVAC foi chamado e, em seguida, alimentará essas informações ao Bixie. Certifique -se de limpar antes de construir, pois a ferramenta pode detectar apenas arquivos que foram realmente compilados enquanto observa.
Bixie não é sólido. Muitos recursos de Java, como simultaneidade e reflexão, não são tratados pelo Bixie e podem resultar em alarmes falsos. Bixie também às vezes detecta inconsistências no bytecode que não têm inconsistência correspondente no código -fonte. Por exemplo, opções condicionais com conjunções na condição às vezes aumentam alarmes falsos.