5.3. Utilizando o Valgrind para o Uso de Memória de Perfil

Valgrind é um quadro que fornece instrumentação para binários do espaço do usuário. Ele vem com uma série de ferramentas que podem ser usadas para o perfil e analisar o desempenho do programa. As ferramentas apresentadas nesta seção fornecem uma análise que pode auxiliar na detecção de erros de memória, tais como o uso de memória não inicializada e alocação ou desalocação de memória impróprios. Todos estão incluídos no valgrind pacote, e pode ser executado com o seguinte comando:
valgrind --tool=toolname program
Substitua toolname pelo nome da ferramenta que você deseja usar (para perfil de memória, memcheck, massif, ou cachegrind), e program com o programa que você deseja realizar o perfil com o Valgrind. Tenha em mente que a instrumentação do Valgrind fará com que o seu programa execute mais vagarosamente do que o normal.
Uma visão geral das capacidades do Valgrind é fornecida emSeção 3.5.3, “Valgrind”. Maiores detalhes, incluindo informações sobre os plugins disponíveis para o Eclipse, estão incluídos no Developer Guide, disponível a partir dohttp://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. A documentação que acompanha pode ser visualizada com o comando man valgrind quando o pacote valgrind estiver instalado, ou encontrado nos seguintes locais:
  • /usr/share/doc/valgrind-version/valgrind_manual.pdf, and
  • /usr/share/doc/valgrind-version/html/index.html.

5.3.1. Uso de Memória de Perfil com o Memcheck

Memcheck é a ferramenta padrão do Valgrind, e pode ser executado com valgrindprograma, sem especificar -- tool=memcheck . Ele detecta e relata uma série de erros de memória que podem ser difíceis de detectar e diagnosticar, assim como o acesso à memória que não deve ocorrer, o uso de valores indefinidos ou não inicializado, memória heap liberada incorretamente, sobrepondo ponteiros, e vazamentos de memória. Os programas funcionam de dez à trinta vezes mais lentamente com Memcheck que quando executado normalmente.
Memcheck retorna erros específicos, dependendo do tipo de problemas que detectar. Estes erros são descritos em detalhes nos documentos incluídos no Valgrind /usr/share/doc/valgrind-version/valgrind_manual.pdf.
Note-se que Memcheck só pode denunciar esses erros — não pode impedir que eles ocorram. Se o seu programa acessa a memória de uma forma que normalmente resultaria em uma falha de segmentação, a falha de segmentação ainda ocorre. No entanto, Memcheck irá registrar uma mensagem de erro imediatamente antes da falha.
Memcheck proporciona opções de linha de comando que podem ser usadas para focar o processo de verificação. Algumas das opções disponíveis são:
--leak-check
Quando ativado, Memcheck procura por vazamentos de memória quando termina o programa cliente. O valor padrão é summary, que gera o número de vazamentos encontrados. Outros valores possíveis são yes e full, sendo que ambos dão detalhes de cada vazamento individual, e no, que desativa a verificação de vazamento de memória.
--undef-value-errors
Quando ativado (definido para yes), Memcheck relata erros quando os valores indefinidos são usados. Quando desativado (definido para no), os erros de valor indefinido não são relatados. Isso é ativado por padrão. Desativar ele irá acelerar Memcheck.
--ignore-ranges
Permite que o usuário especifique uma ou mais faixas que o Memcheck deva ignorar durante a verificação de endereçamento. Múltiplas faixas são delimitadas por vírgulas, por exemplo, --ignore-ranges=0xPP-0xQQ,0xRR-0xSS.
Para uma lista completa de opções consulte a documentação incluída em /usr/share/doc/valgrind-version/valgrind_manual.pdf.