Alimentando a IA com o contexto certo
É aqui que está a maior parte da sua alavancagem. Ao relatar um bug, inclua:
- A mensagem de erro, literal. Copie exatamente — não parafraseie. Parafrasear um erro é como descrever uma foto por telefone: você vai deixar de fora justamente o detalhe que importava.
- O stack trace, especialmente as primeiras linhas.
- O código relevante — a função que lançou o erro, mais tudo que ela chama.
- O que você esperava versus o que aconteceu.
Veja como é, na prática, um de depuração forte:
I'm getting an error when I submit the signup form. Here's the full output:
TypeError: Cannot read properties of undefined (reading 'email')
at validateUser (src/auth/validate.js:14:23)
at handleSignup (src/routes/signup.js:31:10)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
Steps to reproduce: fill in the form, click "Sign up".
Expected: a "Welcome" message.
Actual: the page goes blank and the error above appears in the console.
Here is validate.js (lines around 14):
[paste the function]
And here is the handleSignup function that calls it:
[paste the function]
What could be causing this, and how do I confirm it before changing anything?
Perceba a última linha. Você está pedindo uma hipótese e um passo de confirmação, não uma edição imediata. Isso mantém a IA honesta.
Ajuda saber como ler o trace que você está colando. Um stack trace é um histórico de chamadas, do mais recente para o mais antigo: a linha do topo é onde o programa de fato explodiu, e cada linha abaixo é a função que chamou a de cima. Então, no exemplo, validateUser é onde email foi lido de algo indefinido, e handleSignup é quem chamou validateUser. Os quadros abaixo do seu próprio código — como processTicksAndRejections — pertencem ao runtime da linguagem; você geralmente pode ignorá-los. Leia de cima para baixo até encontrar a primeira linha que aponta para o seu arquivo, e é quase sempre ali que você deve começar a procurar.
O mesmo trace, lido como uma pilha de chamadas, torna a ordem óbvia. A falha está no topo; cada quadro abaixo é o chamador do quadro acima dele:
READ THE TRACE = THE CALL STACK
(top = newest) (who called whom)
▲ validateUser :14 ◀── CRASH ┌─────────────────┐ ▲ start
│ handleSignup :31 │ validateUser 14│ │ looking
│ processTicks... (runtime, ├─────────────────┤ │ here
│ ignore) │ handleSignup 31│ │
│ ├─────────────────┤ │
└─ your code first ──────────────▶│ processTicks... │─┘ (runtime)
└─────────────────┘
read DOWN until the first line that is YOUR file