Lendo relatórios
Interprete a saída.
Lendo relatórios é uma aula grátis de C Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.
Anatomia de um relatório
Um relatório do Valgrind tem três partes:
- O prefixo do ID do processo em cada linha
- Um ou mais blocos de erro, à medida que ocorrem
- Um HEAP and LEAK SUMMARY final na saída
Aprender a ler cada parte transforma uma parede de texto em uma lista de tarefas precisa.
O prefixo do PID
Toda linha do Valgrind começa com ==PID==, por exemplo ==12345==.
Esse é o ID do processo, não parte da saída do seu programa. Ele permite separar as mensagens do Valgrind da saída de printf do seu programa quando ambos compartilham o terminal.
==12345== Memcheck, a memory error detector
==12345== Command: ./prog
==12345==Um bloco de erro de exemplo
Veja um bloco real de escrita inválida:
==12345== Invalid write of size 4==12345== at 0x4005A1: main (prog.c:6)==12345== Address 0x520304c is 0 bytes after a block of size 20 alloc'd==12345== at 0x4838B40: malloc==12345== by 0x40058E: main (prog.c:5)
Leia a primeira linha
A primeira linha informa o tipo e o tamanho do erro: 'Invalid write of size 4'.
O tamanho 4 significa um acesso de 4 bytes, normalmente um int. Essa única linha informa qual categoria de erro você deve esperar antes de continuar a leitura.
Leia o rastreamento da pilha
A linha at representa o quadro mais interno, onde o erro ocorreu. Cada linha by representa um chamador, um nível acima.
Leia de cima para baixo, do quadro mais profundo ao mais superficial. O primeiro quadro com o nome de um arquivo seu quase sempre é o local do erro.
==12345== at 0x4005A1: do_work (work.c:12)
==12345== by 0x4006F0: main (main.c:8)Leia a observação sobre o endereço
A linha Address ... localiza o acesso em relação a um bloco conhecido:
0 bytes after a block of size 20 alloc'd— estouro logo depois do fim4 bytes inside a block of size 4 free'd— uso após liberaçãoon thread 1's stack— acesso à pilha
Ela também mostra onde o bloco foi alocado ou liberado.
O HEAP SUMMARY
Ao sair, você obtém o balanço das alocações:
==12345== HEAP SUMMARY:==12345== in use at exit: 20 bytes in 1 blocks==12345== total heap usage: 3 allocs, 2 frees, 1,044 bytes allocated
Um valor de 'in use at exit' maior que zero significa que algo não foi liberado.
O LEAK SUMMARY
Abaixo do resumo do heap, os vazamentos são agrupados:
definitely lost: 20 bytes in 1 blocksindirectly lost: 0 bytes in 0 blockspossibly lost: 0 bytes in 0 blocksstill reachable: 0 bytes in 0 blocks
Adicione --leak-check=full para anexar um rastreamento a cada bloco perdido.
O ERROR SUMMARY
A última linha contabiliza tudo:
ERROR SUMMARY: 2 errors from 2 contexts
Um 'context' é um local de erro único. Se uma linha com erro for executada um milhão de vezes em um laço, ela continuará sendo um único contexto. Seu objetivo é 0 errors from 0 contexts.
Ordem de triagem
Analise o relatório de forma metódica:
- Corrija primeiro os erros de acesso inválido; eles causam corrupção
- Depois, os erros de valor não inicializado
- Em seguida, os vazamentos definitely e indirectly lost
- Execute novamente após cada correção; uma causa raiz frequentemente elimina vários relatórios
Suprimir ruídos conhecidos
Alguns erros vêm de bibliotecas que você não pode corrigir, como o ambiente de execução de C ou um controlador gráfico. Gere um arquivo de supressão para silenciá-los sem ocultar seus próprios erros.
--gen-suppressions=all imprime entradas de supressão prontas para uso, que você salva e fornece novamente com --suppressions=file.
valgrind --gen-suppressions=all ./prog
valgrind --suppressions=mine.supp ./progVerificação rápida
Interprete uma linha de um relatório.
Recapitulação
Agora você consegue ler relatórios do Valgrind do início ao fim:
==PID==prefixa as linhas do Valgrind, separando-as da saída do programa- Cada bloco de erro informa o tipo, o tamanho, o rastreamento da pilha e uma observação sobre o endereço
- Os resumos HEAP/LEAK contabilizam as alocações e a memória perdida
- ERROR SUMMARY contabiliza os contextos únicos; procure chegar a zero
Faça a triagem dos erros de acesso primeiro, depois dos vazamentos, executando novamente ao longo do processo.
Perguntas Frequentes
A aula “Lendo relatórios” é grátis?
Sim — o texto completo de “Lendo relatórios” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.
O que vou aprender em “Lendo relatórios”?
Interprete a saída. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C Academy?
Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Lendo relatórios”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C Academy?
Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que usar Valgrind
- Detectando vazamentos
- Acesso inválido
- Lendo relatórios