Como Utilizar Valgrind para Verificar Memória em C/C++
Uma ferramenta de depuração de memória!
Nós já publicamos sobre o GNU GDB que serve para debugar em tempo de execução.
Também já publicamos sobre o CppCheck que serve para fazer análise estática.
Nesse artigo vamos conhecer e saber como utilizar o Valgrind, que é uma ferramenta de programação para depuração de memória, detecção de vazamento de memória e “criação de perfil”.
O Valgrind roda seu código numa máquina virtual, ou seja nada do programa original é executado diretamente no processador! Em vez disso, Valgrind primeiro traduz o programa em um formulário temporário e mais simples chamado representação intermediária (IR), que é um formulário baseado em formulário de atribuição única estático neutro do processador.
Valgrind foi originalmente projetado para ser uma ferramenta de depuração de memória livre para arquiteturas x86, mas desde então evoluiu para se tornar uma estrutura genérica para criar ferramentas de análise dinâmica, como verificadores e criadores de perfil.
Valgrind é, em essência, uma máquina virtual que usa técnicas de compilação just-in-time , incluindo recompilação dinâmica.
Suponhamos que você possua o código abaixo que é um mini programa que faz a soma de dois números como parâmetros via linha de comando. O código utiliza Smart Pointers e está tudo funcionando normalmente!
Após compilar você roda seu código e resolve testar com Valgrind com o comando e parâmetros:
O Valgrind não detecta nenhuma falha e retorna ao final da saída abaixo: ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0), ou seja, nenhum erro!
Alocando memória
Agora você decide modificar seu código e alocar memória com a declaração new, mas esquece de desalocar com delete. Foi removido o cabeçalho <memory> e substituido o make_shared no código abaixo
Além disso, além de compilar sem flags, você inclui todas as possíveis para detecção de erro:
Mas, mesmo assim, nenhuma falha foi detectada.
Então, você recolve rodar novamente o Valgrind:
No entanto, dessa vez aparece o erro detectado conforme listado na saída abaixo:
Note que a Memcheck, uma ferramenta do Valgrind detectou que você esqueceu de desalocar o espaço reservado!
Caso seu Valgrind apareça um erro de saída: Fatal error at startup recomendo você instalar a biblioteca libc6-dbg, por exemplo:
Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!