Memberi AI konteks yang tepat
Di sinilah sebagian besar daya ungkitmu berada. Saat kamu melaporkan bug, sertakan:
- Pesan error, verbatim (kata demi kata). Salin persis — jangan diparafrasekan. Memparafrasekan error itu seperti mendeskripsikan foto lewat telepon: kamu akan melewatkan satu detail yang justru paling penting.
- Stack trace, terutama beberapa baris teratas.
- Kode yang relevan — fungsi yang melempar error, plus apa pun yang dipanggilnya.
- Apa yang kamu harapkan versus apa yang terjadi.
Berikut contoh seperti apa debugging yang kuat:
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?
Perhatikan baris terakhir itu. Kamu meminta hipotesis dan langkah konfirmasi, bukan perbaikan langsung. Itu membuat AI tetap jujur.
Berguna juga untuk tahu cara membaca trace yang kamu tempelkan. Stack trace adalah riwayat pemanggilan, dari yang terbaru di atas: baris paling atas adalah tempat program sebenarnya meledak, dan setiap baris di bawahnya adalah fungsi yang memanggil fungsi di atasnya. Jadi dalam contoh ini, validateUser adalah tempat email dibaca dari sesuatu yang undefined, dan handleSignup adalah yang memanggil validateUser. Frame di bawah kode milikmu sendiri — seperti processTicksAndRejections — adalah milik runtime bahasa pemrogramannya; biasanya kamu bisa mengabaikannya. Baca dari atas ke bawah sampai kamu menemukan baris pertama yang menunjuk ke filemu sendiri, dan hampir selalu di situlah tempat mulai mencari.
Trace yang sama, dibaca sebagai tumpukan pemanggilan, membuat urutannya jelas. Crash ada di atas; setiap frame di bawahnya adalah pemanggil dari frame di atasnya:
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