Como debugar código que a IA escreveu

Colar o stack trace no chat faz o agente remendar o sintoma e deixar a causa viva. O método de diagnosticar a raiz antes de pedir correção, com os padrões de falha mais comuns.

Como debugar código que a IA escreveu
Neste artigo
  1. Que ciclo parece produtivo e não é?
  2. Por que diagnosticar antes de pedir?
  3. Quais são os quatro passos?
  4. Que prompt vale mais que dez tentativas?
  5. Onde o código de agente costuma quebrar?
  6. Quando parar de insistir com o agente?
  7. Que log serve para depurar depois?
  8. Perguntas frequentes

Debugar código gerado por IA é diferente de debugar código seu por um motivo: você não tem a memória de por que aquilo foi escrito assim. O método que funciona é diagnosticar a causa raiz na mão antes de pedir qualquer correção, porque pedir “conserta esse erro” faz o agente remendar o sintoma e deixar a causa viva.

Que ciclo parece produtivo e não é?

Todo mundo já fez isso: cola o stack trace no chat, o agente propõe uma mudança, o erro some, aparece outro. Cola de novo, muda de novo, some de novo. Três horas depois o código tem cinco remendos, ninguém entende mais o fluxo, e o bug original volta em outro formato.

Isso acontece porque o agente está otimizando para fazer o erro sumir, não para entender o sistema. Com contexto parcial, o caminho mais curto até o erro sumir quase sempre é um try/catch, um valor padrão ou uma checagem defensiva no lugar errado.

Por que diagnosticar antes de pedir?

A inversão que muda tudo: chegar no agente com a causa já identificada, e pedir a correção específica.

Compare os dois pedidos.

RUIM:
"Ta dando TypeError: cannot read property 'id' of undefined
 na linha 42, arruma"

BOM:
"O findById devolve null quando o registro e de outro tenant,
 porque o filtro de tenant entra na query. O controller assume
 que sempre vem objeto. Quero 404 explicito nesse caso, nao
 optional chaining."

O segundo pedido produz a correção certa de primeira, porque a decisão já foi tomada por quem tem contexto.

Quais são os quatro passos?

1. Reproduzir com o menor caso possível. Antes de olhar código, achar a entrada mínima que dispara o erro. Metade dos bugs se explica sozinha aqui.

2. Descobrir onde o dado fica errado. Não onde o erro estoura, onde o valor deixou de ser o esperado. Costumam ser lugares diferentes, e o agente sempre olha o primeiro.

3. Perguntar por que aquilo foi escrito assim. Aqui o agente ajuda de verdade. Pedir para ele explicar a intenção do trecho, sem alterar nada, é a melhor pergunta que existe pra código que não é seu.

4. Só então pedir a correção, dizendo qual comportamento você quer.

Que prompt vale mais que dez tentativas?

Nao altere nada ainda.

Explique:
1. o que este trecho faz, passo a passo
2. quais suposicoes ele faz sobre a entrada
3. em quais casos essas suposicoes sao falsas

Depois espera minha resposta.

O “não altere nada ainda” é o que faz funcionar. Sem isso, ele explica e já muda, e você perde o estado que estava investigando.

Onde o código de agente costuma quebrar?

Padrão Como aparece Causa de fundo
Assume que sempre vem valor undefined em produção Testou só o caminho feliz
Engole erro em catch vazio Falha silenciosa, dado sumindo Fez o teste passar
Race em operação assíncrona Funciona local, quebra sob carga Sem concorrência no ambiente de teste
Fuso e data Um dia de diferença no relatório Misturou local com UTC
Float pra dinheiro Centavos somem na conciliação Ninguém disse pra usar inteiro
Paginação esquecida Lento com dado real Seed tinha três registros

Quando eu bato num desses, já sei que a correção real é na spec, não no arquivo. Senão volta no próximo módulo.

Quando parar de insistir com o agente?

Se o agente errou a mesma correção duas vezes, eu paro de pedir. Duas falhas seguidas quase sempre significam que ele não tem uma informação que eu tenho e não escrevi: uma regra de negócio, uma restrição de infra, um comportamento de biblioteca.

Insistir na terceira tentativa é como repetir mais alto para alguém que não fala a língua. Melhor escrever a informação que falta e recomeçar.

Que log serve para depurar depois?

O agente gera log genérico, do tipo “erro ao processar”. Isso não serve pra nada às duas da manhã. O que serve tem identificador do tenant, identificador do recurso, e a operação que estava em curso, sem dado pessoal dentro.

Vale pedir explicitamente, porque não sai por padrão. Sobre enxergar o que aconteceu depois que subiu, escrevi em observabilidade de agentes de IA em produção.

Perguntas frequentes

Vale pedir pro outro agente revisar?

Vale, mas com a ressalva de sempre: se os dois concordarem, isso não é prova, porque erram junto. O que prova é teste executado que reproduz o defeito.

E quando eu não entendo o código o suficiente?

Aí o passo 3 vira o principal. Pedir explicação sem alteração é a forma mais rápida de aprender a base do projeto, e ainda serve de checagem: se a explicação não bate com o que o código faz, achou o bug.

Faz sentido reescrever do zero?

Faz quando o trecho é pequeno e a spec está clara. Não faz quando o trecho carrega regra de negócio acumulada, porque a reescrita perde as decisões que ninguém documentou. Ordem de testes em testes automatizados em projeto tocado por agente.

WA in X