A depuração (debugging) é uma habilidade essencial para todo programador. Significa encontrar e corrigir erros no código. Usando as ferramentas certas, esse processo se torna muito mais eficiente!


🔧 1. Configurando o Ambiente de Depuração

1.1 Instalação do VS Code e Extensões

# Extensões essenciais para C/C++:
- C/C++ (Microsoft)
- C/C++ Extension Pack
- Code Runner
- GitLens
- Bracket Pair Colorizer

1.2 Configuração Básica do VS Code

Crie uma pasta .vscode no seu projeto com dois arquivos:

settings.json

{
    "C_Cpp.default.compilerPath": "gcc",
    "code-runner.runInTerminal": true,
    "files.associations": {
        "*.c": "c"
    }
}


tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}



🐛 2. Técnicas Básicas de Depuração

2.1 Debugging com printf()

#include <stdio.h>

int main() {
    int x = 10, y = 5;

    // Ponto de depuração 1
    printf("DEBUG: x = %d, y = %d\\\\n", x, y);

    int resultado = x * y;

    // Ponto de depuração 2
    printf("DEBUG: resultado = %d\\\\n", resultado);

    if (resultado > 40) {
        printf("Resultado é maior que 40\\\\n");
    }

    return 0;
}


2.2 Usando o Debugger do VS Code

launch.json (criar na pasta .vscode)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug C Program",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"
        }
    ]
}



🔍 3. Exemplo Prático: Depurando um Programa com Erros

3.1 Código com Problemas

#include <stdio.h>

int calcular_media(int notas[], int tamanho) {
    int soma = 0;
    for(int i = 0; i <= tamanho; i++) {  // ERRO: i <= tamanho
        soma += notas[i];
    }
    return soma / tamanho;
}

int main() {
    int notas[] = {8, 7, 9, 6, 8};
    int tamanho = 5;

    int media = calcular_media(notas, tamanho);
    printf("Média: %d\\\\n", media);

    return 0;
}


3.2 Passo a Passo da Depuração

  1. Coloque breakpoints (clique na margem esquerda do editor)
  2. Pressione F5 para iniciar a depuração
  3. Use os controles:
    • ▶️ Continue (F5)
    • ⏸️ Pause
    • 🔴 Stop
    • ⏭️ Step Over (F10)
    • ⬇️ Step Into (F11)
    • ⬆️ Step Out (Shift+F11)
  4. Observe as variáveis na janela de debug
  5. Use o Watch para monitorar variáveis específicas

🛠️ 4. Ferramentas Avançadas de Depuração

4.1 Condicional Breakpoints

#include <stdio.h>

int main() {
    for(int i = 0; i < 100; i++) {
        if(i == 50) {  // Breakpoint condicional: pare quando i == 50
            printf("Chegou na metade!\\\\n");
        }
        printf("i = %d\\\\n", i);
    }
    return 0;
}


4.2 Logpoints (Sem Alterar o Código)

No VS Code, clique com botão direito no breakpoint → “Edit Breakpoint” → “Log Message”

Mensagem: "Iteração {i}, valor: {array[i]}"


📋 5. Checklist de Depuração

Erros Comuns e Como Encontrá-los:

ErroSintomaSolução
SegmentaçãoPrograma crashaVerifique ponteiros e arrays
Loop infinitoPrograma não terminaVerifique condições de parada
Lógica erradaResultado incorretoUse breakpoints e watch
MemóriaVazamento ou corrupçãoUse valgrind (Linux)

🎯 6. Exercício Prático: Depure este Código

#include <stdio.h>

int encontrar_maior(int arr[], int n) {
    int maior = arr[0];
    for(int i = 1; i <= n; i++) {  // ERRO
        if(arr[i] > maior) {
            maior = arr[i];
        }
    }
    return maior;
}

int main() {
    int numeros[] = {3, 7, 2, 9, 5};
    int maior = encontrar_maior(numeros, 5);
    printf("Maior número: %d\\\\n", maior);
    return 0;
}


Tarefa:

  1. Identifique o erro usando o debugger
  2. Corrija o código
  3. Verifique o resultado

🚀 PRÓXIMA AULA: STRUCTS EM C + JOGO DA FORCA!

Agora que você sabe depurar código, vamos criar um projeto completo usando structs!

😊


Descubra mais sobre Apprendendo

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue lendo