Projeto JVM - Software Basico

Diagrama

Compilando

Compilando usando CMake de forma manual

# cria pasta build
mkdir -p build 
cd build

# executa o cmake dentro da pasta build
cmake .. -G "Unix Makefiles"

# executa o make dentro de build
make

# volta para diretório raiz do projeto
cd ..

Utilizando script shell

# Linux
$ ./compile.sh -l

# Windows
$ ./compile.sh -w

Caso apresente erro de formatação de arquivos shell .sh no Linux, usar o comando

$ sed -i 's/\r$//' scriptname.sh

Caso prefira, no ambiente Windows, pode utilizar apenas o Makefile

make

Executando

Leitor e Exibidor

Exibe o bytecode do arquivo .class (flag -e)

# Linux e Windows
$ ./jvm_boss -e test/class/HelloJava.class

# shell script
$ ./read.sh HelloJava

Interpretador JVM

Interpreta e executa o arquivo .class (flag -i)

# Linux e Windows
$ ./jvm_boss -i test/class/HelloJava.class

# shell script
$ ./jvm.sh HelloJava

Compilação e informações com javac/javap

Compila arquivo .java para .class

$ javac HelloJava.java

Mostra informações do bytecode do arquivo .class

$ javap HelloJava.class

# para mais info, flags: -c, -verbose ou -v
$ javap -v HelloJava.class

Arquivos Teste

Arquivos java (.java) encontram-se na pasta test/java e arquivos de classe (.class) encontram-se na pasta test/class.

Para adicionar mais arquivos classe de teste, basta inserir o arquivo.java no diretorio test/java e executar na pasta raiz do projeto o comando:

# Linux e Windows
$ java test/java/arquivo.java -d test/class

# shell script
$  javac.sh arquivo

Classes Java (.class) de Teste

  • cafebabe
  • HelloJava
  • Prints

Aritmeticos

  • Sum
  • Multiply
  • int_aritmetica
  • float_aritmetica
  • double_aritmetica

Vetores

  • vetor
  • vetor2
  • Vector_1
  • Vector_2
  • multi

Controle

  • Loop_for
  • Loop_while
  • Switch
  • tableswitch
  • lookupswitch

Comparação

  • Comparison

Conversão

  • Convert_int
  • Convert_float
  • Convert_double
  • Convert_long

Metodos

  • methods
  • MethodStatic
  • MethodParams
  • recursao

Configurações

Até a versão Java SE 8

Analisadores

Analisador estático: Cppcheck 1.83

Instalação no Linux

$ sudo apt-get install cppcheck

Executando CppCheck

# arquivos especificos
$ cppcheck --verbose ./src/main.cpp
$ cppcheck --enable=warning ./src/main.cpp

# todos arquivos .cpp dentro de src
$ cppcheck --verbose --enable=warning ./src/*.cpp

# ou com shell script
$ ./check.sh -v main
$ ./check.sh -w main
$ ./check.sh -all

Analisador dinâmico: Valgrind

Instalação no Linux

$ sudo apt-get install valgrind

Executando

# com mais detalhes sobre vazamento de memória
$ valgrind –leak-check=full ./jvm_boss -e test/HelloJava.class

# shell script
$ ./valgrind.sh HelloJava

Documentação

Instalação no Linux

$ git clone https://github.com/doxygen/doxygen.git

$ cd doxygen

$ mkdir build

$ cd build

$ cmake -G "Unix Makefiles" ..

$ make

$ make install

Criando arquivo de configuração do Doxygen

# Cria um arquivo de configuração do doxygen com o nome "doxygen_config"
$ doxygen -g doxygen_config

No arquivo "doxygen_config", foi necessário modificar a configuração "RECURSIVE = YES" para gerar a documentação.

Executando

# Gera ou atualiza a pasta "html" do projeto. Deve-se rodar este comando sempre que o código for atualizado
$ doxygen doxygen_config

Para visualizar a documentação gerada, basta abrir a pasta "html" do projeto e abrir o arquivo "index.html" com o navegador.