Como depurar programas em C, com cobertura prática de depuração com printf e bugs comuns.
printf para inspecionar valoresgcc -Wall -Wextra-fsanitize=address,undefined)arquivo:linha:coluna: error: mensagem. A chave é corrigir o primeiro erro primeiro.;. Verifique a linha anterior à reportada.int x = 10 // ← sem ; ! printf("%d", x);
#include ausente.%d usado onde um double exigiria %f.printf para imprimir valores de variáveis ou marcadores de "passei por aqui" e rastrear o comportamento do seu programa. É a técnica mais simples que iniciantes podem aplicar imediatamente.// Técnica 1: imprimir valores de variáveis printf("DEBUG: x=%d, y=%d\n", x, y); // Técnica 2: verificar se a execução chegou até aqui printf("DEBUG: cheguei antes do laço\n"); // Técnica 3: imprimir variáveis do laço a cada iteração for (int i = 0; i < n; i++) { printf("DEBUG: i=%d, sum=%d\n", i, sum); sum += a[i]; } // Técnica 4: ver qual ramo foi tomado if (x > 0) { printf("DEBUG: x é positivo\n"); } else { printf("DEBUG: x é 0 ou negativo\n"); }
i começa? a[5] existe?i=1 em vez de i=0, ou usar i<=n quando queria i<n.// Errado: acessa a[5] (fora dos limites) for (int i = 0; i <= 5; i++) sum += a[i]; // Certo: for (int i = 0; i < 5; i++) sum += a[i];
int sum; // ← valor inicial é lixo! for (...) sum += a[i]; // lixo + a[i] = ? // Certo: int sum = 0;
if (x = 5) atribui 5 a x (e sempre é verdadeiro). Use == para comparação.if (x = 5) // Errado: atribui 5 a x (sempre verdadeiro) if (x == 5) // Certo: verifica se x é igual a 5
int i = 0; while (i < 10) { printf("%d\n", i); // esqueceu do i++! -> i fica em 0 para sempre }
scanf("%d", &x), não scanf("%d", x). Sem o endereço, o scanf quebra.scanf("%d", x); // Errado: crash! scanf("%d", &x); // Certo
average = 5.00.Confira seu entendimento.
Imprimir valores de variáveis ou marcadores de execução com printf ajuda a localizar a causa de um bug. É a técnica de depuração mais básica.
Depuradores permitem definir breakpoints, executar passo a passo e observar variáveis — tudo que você precisa para analisar um programa em detalhes.
Escrever pequenos pedaços de código e testar com frequência permite pegar bugs rapidamente. Comentários também ajudam muito.