Depurando Python com pdb: Guia para iniciantes

Tempo de leitura: 9 minutos

Aprender a programar envolve, inevitavelmente, enfrentar erros e comportamentos inesperados no código. Quando algo não funciona como deveria, muitos iniciantes recorrem apenas a várias funções print() para tentar entender o fluxo dos dados. Embora essa técnica ajude, o Python oferece uma ferramenta nativa muito mais poderosa e profissional: o pdb (Python Debugger). Dominar a arte de depurar Python com pdb é o próximo grande passo para qualquer programador que deseja sair do nível básico e ganhar autonomia na resolução de problemas complexos.

O que é Depuração e por que o pdb é essencial?

Depurar, ou “debugar”, é o processo de identificar e remover erros (bugs) de um software. Em vez de simplesmente rodar o programa e ver o erro no final, a depuração permite que você entre no “corpo” do código enquanto ele é executado. Você pode pausar o programa em uma linha específica, observar o valor de cada variável e até alterar o fluxo de execução em tempo real.

O pdb é um módulo padrão do Python, o que significa que você não precisa instalar nada externo para começar a usar. Ele é uma ferramenta de linha de comando que funciona em qualquer ambiente, desde um servidor remoto via terminal até a sua máquina local. Para quem está saindo da lógica de programação com Python puramente teórica, o pdb oferece uma visão transparente de como o computador interpreta cada instrução.

Como iniciar o pdb no seu código

Existem diversas maneiras de invocar o depurador. A forma mais moderna (disponível a partir do Python 3.7) é através da função embutida breakpoint(). Quando o interpretador encontra essa linha, ele pausa a execução e abre o console interativo do pdb.

Python
def calcular_bonus(salario):
    taxa = 0.15
    # O programa vai parar exatamente aqui
    breakpoint()
    bonus = salario * taxa
    return bonus

print(calcular_bonus(3000))

Antigamente, era comum usar import pdb; pdb.set_trace(). Embora ainda funcione e seja visto em muitos tutoriais antigos, a função breakpoint() é preferível por ser mais limpa e flexível. Se você estiver usando ferramentas como o debugger do VS Code, ele também reconhece esses pontos de parada automaticamente.

Os Comandos Essenciais para Navegação

Uma vez que o programa está pausado, o terminal exibirá um prompt (Pdb) aguardando suas ordens. Para dominar a ferramenta, você precisa conhecer os comandos básicos de navegação:

  • l (list): Mostra 11 linhas de código ao redor da linha atual, ajudando você a se localizar no arquivo.
  • n (next): Executa a linha atual e vai para a próxima instrução dentro do mesmo escopo.
  • s (step): “Entra” dentro de uma função. Se a linha atual chamar uma função, o depurador entrará nela para você ver o que acontece internamente.
  • c (continue): Retoma a execução normal do programa até encontrar o próximo breakpoint ou o fim do script.
  • p (print): Avalia uma expressão ou variável. Por exemplo, p nome_da_variavel imprime o valor guardado naquele momento.
  • q (quit): Aborta a execução do programa e sai do depurador.

A diferença entre “next” e “step” é crucial. Use “next” se você confia que a função chamada naquela linha funciona bem. Use “step” se suspeitar que o erro está dentro daquela função específica.

Inspecionando Variáveis e Tipos de Dados

Uma das maiores vantagens de depurar Python com pdb é a capacidade de verificar o estado das variáveis sem ter que reiniciar o script. Você pode verificar se uma variável é do tipo float em Python ou se uma lista contém os itens esperados.

Por exemplo, se você estiver lidando com dicionários em Python complexos, pode simplesmente digitar o nome da chave no prompt do pdb para ver seu valor. Isso é extremamente útil em aplicações de ciência de dados ou quando se trabalha com APIs externas, onde a estrutura dos dados nem sempre é clara no início.

“Depurar é duas vezes mais difícil do que escrever o código originalmente. Portanto, se você escrever o código da forma mais inteligente possível, você não será, por definição, inteligente o suficiente para depurá-lo.” — Brian Kernighan.

Depurando Estruturas de Repetição

Loops são locais frequentes de bugs, especialmente erros de “off-by-one” (quando o loop roda uma vez a mais ou a menos). Ao depurar um for em Python, você pode usar o comando unt (until). Ele executa o código até que a linha com um número maior que a atual seja alcançada, o que é excelente para sair de loops sem precisar clicar em “next” cem vezes.

Imagine que você está processando uma lista de usuários e o erro ocorre apenas no 50º elemento. Colocar um breakpoint direto pode ser cansativo. Nesses casos, você pode usar blocos if para disparar o depurador apenas sob certas condições:

Python
for i, usuario in enumerate(lista_usuarios):
    if i == 49:
        breakpoint()
    processar(usuario)

Essa abordagem condicional economiza tempo e permite focar exatamente no momento em que a falha ocorre.

Diferenças entre pdb e depuração em IDEs

Muitos iniciantes perguntam se vale a pena aprender pdb se o PyCharm ou o VS Code oferecem interfaces visuais. A resposta é um sim absoluto. Interfaces gráficas são excelentes para o desenvolvimento local, mas o pdb é universal.

Se você precisar consertar um script em um servidor Linux que não possui interface gráfica, ou se estiver depurando um contêiner Docker, o pdb será seu melhor amigo. Além disso, entender como o pdb funciona por baixo dos panos melhora sua compreensão sobre a pilha de execução (stack trace) do Python, uma habilidade valorizada na documentação oficial da Python Software Foundation.

Tabela de Comandos Rápidos

Abaixo, apresentamos uma tabela comparativa com os comandos mais utilizados para facilitar sua consulta rápida durante o desenvolvimento:

ComandoAtalhoDescrição
listlMostra o código ao redor da linha atual
nextnPassa para a próxima linha sem entrar em funções
stepsEntra na função chamada na linha atual
continuecContinua a execução até o próximo breakpoint
wherewMostra a pilha de chamadas (onde você está)
returnrExecuta até o retorno da função atual

Melhores Práticas de Depuração

Para evitar que o processo de depuração se torne uma frustração, siga algumas diretrizes recomendadas por especialistas da comunidade PEP 8 e redatores sêniores:

  • Não deixe breakpoints no código de produção: Antes de fazer o commit do seu código, certifique-se de remover todas as chamadas breakpoint().
  • Seja específico: Não saia dando “step” em cada linha. Tente isolar o problema em uma função específica antes de ativar o depurador.
  • Use f-strings para logs rápidos: Se o problema for simples, usar f-strings para debug rápido pode ser mais veloz do que abrir o pdb. Deixe o pdb para comportamentos lógicos complexos.
  • Limpe o estado: Às vezes, o erro é causado por dados residuais. Reinicie o interpretador se achar que variáveis globais estão poluindo seu teste.

O Fluxo de Trabalho do Profissional

O fluxo ideal começa com a reprodução do erro. Você nunca deve tentar consertar um bug que não consegue reproduzir de forma consistente. Uma vez que você tem um script que falha, insira o breakpoint() logo antes da linha suspeita. Ao entrar no pdb, verifique o estado das entradas (argumentos da função) e compare com o que você esperava. Frequentemente, o erro não está na lógica de cálculo, mas sim em um dado que chegou com o tipo errado ou vazio (None).

A depuração é uma investigação científica: você cria uma hipótese (“Eu acho que a variável X está chegando vazia”), usa o pdb para testar essa hipótese e, se confirmado, aplica a correção. Esse método economiza horas de “tentativa e erro” aleatória.

Perguntas Frequentes

O pdb funciona em scripts que usam bibliotecas externas?

Sim, o pdb funciona perfeitamente com qualquer biblioteca, como Pandas ou NumPy. Você pode inclusive dar “step” para dentro do código dessas bibliotecas para entender como elas processam seus dados.

Qual a vantagem do breakpoint() sobre o print()?

O print() é estático e polui a saída do terminal. O breakpoint() é interativo, permitindo que você altere variáveis e teste comandos novos sem precisar reiniciar o programa.

Como depuro um erro que faz o programa travar completamente?

Nesse caso, você pode rodar o script diretamente pelo pdb no terminal usando o comando python -m pdb seu_arquivo.py. Isso permite controlar a execução desde a primeira linha.

Consigo ver as variáveis locais e globais ao mesmo tempo?

Sim, dentro do pdb você pode usar os comandos locals() e globals() para listar todos os objetos disponíveis em cada escopo no momento da pausa.

O pdb ajuda a encontrar erros de sintaxe?

Não. Erros de sintaxe impedem o Python de sequer iniciar a execução do arquivo. O pdb é focado em erros de lógica e erros de tempo de execução (runtime errors).

É possível usar o pdb no Jupyter Notebook ou Google Colab?

Sim, mas a experiência é um pouco diferente. No Jupyter, costuma-se usar o comando mágico %debug logo após um erro ocorrer para abrir um depurador interativo na célula.

Posso alterar o valor de uma variável durante a depuração?

Com certeza! No prompt do pdb, se você digitar minha_var = 10, o valor da variável será alterado na memória e o resto da execução usará esse novo valor.

O comando ‘step’ entra em funções do próprio Python (built-in)?

Geralmente não. O depurador costuma pular funções implementadas em C (como as nativas) e foca apenas no código escrito em Python para manter a depuração eficiente.

Dominar o pdb transformará sua relação com o código. Em vez de temer os erros, você passará a vê-los como oportunidades de entender exatamente como seus programas funcionam. Comece aplicando o breakpoint() no seu próximo pequeno projeto e sinta a diferença na sua produtividade.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Boas Práticas
    Foto do Leandro Hirt

    Por que seu script Python é lento? Dicas de otimização

    Você já sentiu que seu código está demorando mais do que o esperado para processar uma tarefa simples? Entender por

    Ler mais

    Tempo de leitura: 7 minutos
    13/02/2026
    Boas Práticas
    Foto do Leandro Hirt

    Como usar o with para abrir arquivos em Python

    Aprender a manipular dados externos é um marco fundamental para qualquer programador iniciante, e saber como usar o with para

    Ler mais

    Tempo de leitura: 9 minutos
    12/02/2026
    Boas Práticas
    Foto do Leandro Hirt

    Debug Python no VS Code para iniciantes

    Aprender Debug Python no VS Code é uma das habilidades mais transformadoras para quem está começando a programar. Quando escrevemos

    Ler mais

    Tempo de leitura: 9 minutos
    09/02/2026
    Logo do Python com velocímetro representando performance e velocidade da linguagem
    Boas Práticas
    Foto do Leandro Hirt

    Por que Python é Lento? Entenda os Motivos e Como Resolver

    Você já ouviu alguém dizer que Python é lento? Essa é uma das críticas mais comuns à linguagem. Mas será

    Ler mais

    Tempo de leitura: 11 minutos
    12/01/2026
    Logo do Python com o texto 'Testes Unitários' abaixo
    Boas Práticas
    Foto do Leandro Hirt

    Como Fazer Testes Unitários no Python

    Aprenda como fazer testes unitários no Python com unittest e pytest. Guia completo com exemplos práticos, fixtures, mocks e boas

    Ler mais

    Tempo de leitura: 18 minutos
    14/12/2025
    Logo do Python com o texto 'PEP 8' sobre fundo azul escuro, representando o guia de estilo da linguagem
    Boas Práticas
    Foto do Leandro Hirt

    Entenda o que é o PEP 8 e como Aplicá-lo no Python

    A linguagem Python é conhecida pela sua simplicidade e legibilidade. Desde o início, seu criador, Guido van Rossum, enfatizou que

    Ler mais

    Tempo de leitura: 9 minutos
    08/11/2025