Debugging bukan sekadar meminta AI mencari baris kode yang salah. Debugging yang efektif adalah proses mengubah gejala menjadi bukti: pesan error, input yang memicu masalah, hasil aktual, hasil yang diharapkan, dan langkah yang sudah dicoba. AI sangat membantu mempercepat proses ini, tetapi kualitas jawabannya bergantung pada konteks dan cara kita memverifikasinya.
AI sebagai partner investigasi, bukan mesin tebak
Gunakan AI untuk membuat hipotesis, menjelaskan stack trace, menyusun eksperimen kecil, dan membandingkan hasil. Jangan langsung menerima patch yang diberikan. Jalankan perubahan di branch atau lingkungan pengujian, lalu pastikan test, log, dan perilaku aplikasi benar-benar sesuai.
Prompt debugging yang baik biasanya berisi lima bagian:
- Konteks: versi PHP atau Node.js, framework, database, dan lingkungan eksekusi.
- Gejala: error lengkap, status HTTP, query lambat, atau output yang keliru.
- Input minimal: data contoh yang sudah dianonimkan dan cukup untuk mereproduksi masalah.
- Ekspektasi: hasil yang seharusnya terjadi.
- Batasan: jangan mengubah kontrak API, jangan menyentuh migrasi, atau jangan menampilkan secret.
Analisis bug berikut tanpa mengarang konteks. Pisahkan fakta, hipotesis,
dan langkah verifikasi. Jangan menampilkan secret.
Versi: PHP 8.x, Laravel, MySQL.
Gejala: endpoint /orders mengembalikan 500 ketika filter tanggal dipakai.
Error: [tempel stack trace lengkap yang sudah disensor]
Ekspektasi: daftar order kosong jika tidak ada hasil, bukan 500.
Berikan patch minimal dan test regresinya.
Alur kerja debugging yang aman
- Reproduksi bug dengan input sekecil mungkin.
- Simpan bukti: log, stack trace, request ID, query, dan durasi.
- Minta AI merangkum bukti tanpa langsung menulis ulang seluruh modul.
- Uji hipotesis satu per satu dengan perubahan yang dapat dibatalkan.
- Buat patch minimal, tambahkan test regresi, lalu jalankan lint, unit test, dan pemeriksaan keamanan.
- Review diff secara manual sebelum merge atau deploy.
Jangan mengirim file .env, token, password, cookie, private key, data pelanggan, atau dump database mentah ke layanan AI. Ganti nilai sensitif dengan placeholder seperti REDACTED_TOKEN dan pertahankan bentuk datanya agar analisis tetap bermakna.
Debugging PHP dengan AI
Untuk PHP, minta AI membedakan syntax error, diagnostic error, exception, dan error runtime. Di lingkungan development, gunakan error_reporting(E_ALL) agar masalah yang tersembunyi terlihat; di production, tampilkan pesan umum kepada pengguna dan simpan detail pada log yang terlindungi. Manual PHP menjelaskan bahwa error_reporting() mengatur level error yang dilaporkan dan exception dapat mengalir naik melalui call stack sampai ditangani.
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
try {
$result = $service->findOrder($orderId);
} catch (Throwable $e) {
error_log(sprintf(
'findOrder failed: %s at %s:%d',
$e->getMessage(), $e->getFile(), $e->getLine()
));
throw $e;
}
Prompt yang lebih berguna bukan “perbaiki PHP ini”, melainkan: “Jelaskan alur exception dari controller ke service, tunjukkan asumsi tipe yang mungkin salah, lalu berikan satu test yang gagal sebelum patch dan lulus setelah patch.” Minta AI memeriksa nullability, tipe return, validasi input, transaksi database, dan perbedaan konfigurasi development-production.
Debugging JavaScript di browser dan Node.js
Untuk JavaScript browser, mulai dari tab Network dan Console: periksa status HTTP, payload request, response, timing, dan stack trace. Di Chrome DevTools, breakpoint dapat menghentikan eksekusi agar nilai variabel dan call stack bisa diperiksa. Conditional breakpoint berguna ketika bug hanya muncul pada input tertentu, sedangkan logpoint dapat mencatat nilai tanpa menambahkan console.log() permanen ke source code.
async function loadProfile(userId) {
const response = await fetch('/api/users/' + userId);
if (!response.ok) {
throw new Error('Profile request failed: ' + response.status);
}
return response.json();
}
Minta AI menelusuri rantai asynchronous secara eksplisit: siapa yang memanggil fungsi, kapan Promise ditunggu, bagaimana error ditangani, dan apakah komponen masih terpasang ketika response datang. Banyak bug UI bukan berasal dari satu baris yang salah, melainkan race condition, stale state, double submit, atau response API yang berbeda dari asumsi frontend.
Analisis fungsi async ini dengan fokus pada race condition dan error handling.
Buat timeline eksekusi untuk dua request yang selesai dalam urutan berbeda.
Berikan test atau reproduksi minimal. Jangan mengganti API publik.
Debugging SQL dan performa query
Berikan AI schema ringkas, contoh data kecil, query, hasil aktual, dan hasil yang diharapkan. Jangan hanya menempelkan query tanpa konteks relasi dan cardinality. Untuk MySQL, gunakan EXPLAIN untuk melihat rencana eksekusi; pada versi yang mendukung, EXPLAIN ANALYZE membantu membandingkan estimasi optimizer dengan waktu aktual.
EXPLAIN SELECT o.id, o.created_at, c.name
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.created_at >= '2026-10-01'
AND o.created_at < '2026-11-01'
ORDER BY o.created_at DESC;
Minta AI menjawab dengan format: tabel yang dibaca, kemungkinan full table scan, index yang relevan, masalah pada JOIN atau filter, risiko perubahan index, dan cara mengukur hasil sebelum-sesudah. Jangan menerima saran “tambahkan index di semua kolom”; index memiliki biaya penyimpanan dan dapat memperlambat operasi tulis.
Untuk keamanan, gunakan prepared statement atau parameterized query. Jangan meminta AI “memperbaiki” SQL dengan menggabungkan input pengguna ke string query. Jika nama kolom, tabel, atau arah sort harus dinamis, gunakan allowlist dari nilai yang ditentukan aplikasi.
$stmt = $pdo->prepare(
'SELECT id, name FROM users WHERE email = :email'
);
$stmt->execute(['email' => $email]);
Prompt untuk membandingkan dugaan dan bukti
Saya punya dua hipotesis:
A. Query lambat karena index tidak dipakai.
B. Query lambat karena JOIN menghasilkan baris berlipat.
Bukti:
- EXPLAIN: [tempel output yang sudah disensor]
- jumlah baris tiap tabel: [isi angka]
- durasi sebelum dan sesudah filter: [isi angka]
Bandingkan A dan B. Sebutkan bukti yang mendukung atau melemahkan masing-masing,
lalu berikan eksperimen paling kecil untuk membedakannya.
Format seperti ini memaksa AI membedakan observasi dari dugaan. Jika jawabannya masih terlalu yakin, minta daftar informasi yang kurang dan jangan menambal kode sebelum informasi penting tersedia.
Kesalahan umum saat memakai AI untuk debugging
- Menempelkan seluruh repository: konteks berlebihan menyulitkan fokus dan meningkatkan risiko kebocoran.
- Menghapus error handling: patch yang “membuat hijau” bisa menyembunyikan kegagalan.
- Mengubah terlalu banyak file: sulit mengetahui perubahan mana yang menyelesaikan bug.
- Mengabaikan versi: solusi PHP, framework, browser, driver, atau database dapat berbeda antarversi.
- Tidak membuat reproduksi: bug dapat muncul lagi karena tidak ada test regresi.
- Mengukur dengan perasaan: performa harus dibandingkan memakai data, timing, dan rencana eksekusi.
Checklist sebelum patch dinyatakan selesai
- Bug dapat direproduksi sebelum perubahan.
- Akar masalah didukung bukti, bukan hanya tebakan AI.
- Patch sekecil mungkin dan diff sudah ditinjau.
- Test regresi gagal sebelum patch dan lulus setelah patch.
- Input invalid, error network, timeout, null, dan permission sudah diuji.
- Secret dan data pribadi tidak masuk prompt, log, atau commit.
- Query aman dari injection dan performanya diukur pada data yang realistis.
- Perubahan production memiliki rencana rollback.
Penutup
AI paling berguna dalam debugging ketika diperlakukan sebagai partner berpikir yang disiplin: ia membantu membaca bukti dan merancang eksperimen, sementara developer tetap memegang keputusan, verifikasi, dan tanggung jawab keamanan. Mulailah dari reproduksi minimal, kirim konteks yang relevan, minta hipotesis yang bisa diuji, lalu buktikan patch dengan test dan pengukuran.
Sumber rujukan
- PHP Manual: error_reporting
- PHP Manual: Error Handling
- Chrome DevTools: Pause your code with breakpoints
- MySQL 8.0 Reference Manual: EXPLAIN Statement
- OWASP: Injection Prevention Cheat Sheet
Transparansi: Artikel ini disusun bersama Codekop AI berdasarkan sumber yang tercantum, lalu ditinjau dan disunting oleh Fauzan Falah. AI dapat keliru, jadi silakan cek kembali sumber asli.