Como usar Valgrind C ++

Como usar Valgrind C ++
Valgrind é um detector de má administração de memória. Podemos saber sobre os vazamentos de memória e erros de desalocação. É um código de multiuso. Também é conhecido por ser uma ferramenta de depuração de memória para Linux. Este detector tem uma característica importante da execução do seu programa no ambiente de memória de Valgrind e também monitora o uso da memória. Se, em alguns casos de escrever um código, essa situação ocorre quando você usa a memória que ainda não foi inicializada ou você esquece de libertar o ponteiro, esses efeitos causadores de erros são detectados por Valgrind. Este artigo se concentrará principalmente no uso de Valgrind para detectar esses tipos de problemas.

Valgrind é dependente do sistema operacional, pois é executável apenas no sistema operacional Linux. Valgrind é uma coleção de ferramentas de detecção de memória que são todas de código aberto. É amplamente utilizado e mais poderoso do que outras ferramentas, como Memwatch, Mtrace, etc., que desempenham as mesmas funções que Valgrind. Embora o C ++ seja uma linguagem de programação muito poderosa e útil, requer muito poder para depuração e execução. Ainda assim, às vezes ocorrem erros de memória, o que é um problema específico. Da mesma forma, existe outro erro que é um vazamento de memória. Valgrind é um programa específico que ajuda você a resolver os dois problemas.

Instalação Valgrind

Ao trabalhar na plataforma Linux, muitos novos programas são necessários para executar alguns programas específicos nesse sistema operacional. Por exemplo, enquanto estiver usando um terminal, você precisa de um snap, apto para realizar muitas outras instalações de software. Da mesma forma, Valgrind também está instalado no terminal usando um comando 'sudo-capt'.

$ sudo apt install valgrind

Isso levará algum tempo, mas no final, ele é instalado com sucesso em seu sistema.

Algumas instruções para o uso de Valgrind

O programa ou aplicação a ser testado é adicionado através de um compilador que compila o programa. "-G" é usado, pois também é um compilador para programas C ++.

O valor resultante do registro de detecção é exibido como uma saída no terminal. Além disso, o valor resultante pode ser salvo em um arquivo.

Se você deseja mais instruções ou precisar de ajuda para usar algum comando específico, você pode executar Valgrind -h, fornecendo uma interface do terminal de ajuda.

Usamos um formato específico para a indicação de detecção dos vazamentos na memória: # Valgrind -tool = memcheck -leak -check = completo ./arquivo, -leak -check = completo

Princípio da detecção de memória de Valgrind

Valgrind usa um ambiente virtual para a implementação dos programas. O programa ou aplicação a ser testado é executado neste ambiente praticamente criado. A função de Valgrind é monitorar o aplicativo, seu uso e a liberação da memória em tempo real e também registrar as informações que podem mostrar algumas anormalidades na memória. Em Valgrind, há um componente de detecção de memória, Memcheck. Ele suporta muitas funções. Alguns deles estão listados abaixo:

  • O espaço de memória não é atribuído.
  • O acesso ao espaço da memória excedeu o limite fornecido.
  • O espaço de memória é liberado repetidamente.
  • A aplicação do espaço da memória e a liberação da memória não são correspondentes.

Memcheck pode verificar muitos problemas, pois é o componente mais poderoso de Valgrind.

  • Variáveis ​​que não são inicializadas
  • Um MALLOC () com a funcionalidade de 'qualquer free ()'
  • Ponteiro de pilha que acessa a memória inválida.
  • Agora vamos explicar o funcionamento de Valgrind através de alguns exemplos

Memória não inicializada

Esse problema ocorre quando você está escrevendo um programa com o uso de qualquer variável ou matriz. E você esqueceu de declarar e inicializar a matriz no início. E no momento do uso, você não está bem ciente dessa questão de esquecer. Este erro é identificado por Valgrind. Para explicar o exemplo, adotamos um programa em C++.

O primeiro passo é usar a biblioteca de std.

# incluir

Aqui você pode ver que o valor de uma variável não é atribuído e é dado à matriz e, da mesma forma, esses valores são impressos usando um loop 'para' para '. Aqui esquecemos de atribuir um valor a uma variável. O erro ocorrerá quando uma matriz vazia for optada por exibir os valores.

Agora vamos executar este código no terminal Ubuntu. Usaremos um compilador 'g ++' para compilar o código. Ao contrário do código C simples, aqui usaremos a palavra -chave de 'Valgrind's.

$ gcc -wall -pedantic -g file1.C -O File1
$ Valgrind ./file1

Agora este comando trará uma parte da página utilizada pela memória. Primeiro, teremos alguma descrição sobre 'Memcheck'. Em seguida, os detalhes sobre o valor não inicializado são mostrados. Nesta parte, você pode ver que o número da linha é mencionado onde ocorreu um erro. Aqui o número da linha é '11'.

Detecção de vazamentos de memória

Suponha que você tenha um programa que contenha malloc () sem graça (). Isso levará a um vazamento de memória. Há um exemplo de código -fonte C ++.

No programa principal, um ponteiro do tipo de personagem é usado com uma função malloc. Até um pequeno programa também é responsável pela identificação de vazamento de memória. Agora veremos a saída.

O conteúdo de saída corresponde à saída do anterior em alguns aspectos, por isso apenas exibimos a parte dos vazamentos de memória para ter foco completo.

Agora vamos compilar o código acima e executá -lo através de um comando.

$ Valgrind--tool = Memcheck--leak-check = sim--track-origins = sim ./file1

Este comando mostrará os seguintes resultados. Você pode observar aqui que o número de bytes perdidos são exibidos. A linha em que o erro ocorreu também é exibido na última linha dos valores resultantes.

Este resultado também contém o resumo do vazamento, o que explica bytes totais perdidos direta ou indiretamente; Seja qual for a descrição, ela é explicada brevemente no resultado.

Detecção de acesso à memória inválida

Às vezes, essas condições são encontradas quando o código -fonte contém um bug, o ponteiro que usamos para acessar o local da memória limitada. Este erro é detectado por Memcheck.

Ptr [11] = 'z';

Neste código acima mencionado, você pode ver que usamos um ponteiro 'ptr' que está tentando acessar um local de memória que excede o limite.

A saída mostra que o tamanho é inválido. Como declaramos uma variedade de tamanho [10]. E o ponteiro está acessando o slot de 11, que está fora de alcance que declaramos.

Detecção de operações penduradas

Estes são aqueles ponteiros que apontam para a memória que já está libertada.

Aqui temos primeiro o espaço livre; Mesmo depois que o espaço é libertado, o código está tentando acessar a memória, que é apontada por um ponteiro.

Conclusão

'Como usar Valgrind C ++' é implementado no terminal Linux. Compreende o conceito básico, os tipos de valgrind, sua instalação, instrução para uso e algumas principais funções de seus componentes. Memcheck, como o principal componente de Valgrind, detecta o erro no programa, seja o caso de vazamento de memória ou memória não inicializada. Todos os exemplos mencionados mostram o funcionamento de Valgrind, incluindo Malloc (). Este artigo será benéfico sobre o trabalho e os princípios de Valgrind no ambiente de programação de C++.