0Pricing
C Academy · Aula

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 fim
  • 4 bytes inside a block of size 4 free'd — uso após liberação
  • on 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 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still 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 ./prog

Verificaçã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

  1. Por que usar Valgrind
  2. Detectando vazamentos
  3. Acesso inválido
  4. Lendo relatórios
← Voltar para C Academy