DDevArchive
Đăng nhập

Debugging & DevTools: tìm lỗi code như thám tử

Code sai là bình thường — developer dành 50% thời gian để debug. Vấn đề là debug CÁCH NÀO. Đừng đoán mò bằng console.log khắp nơi. DevTools của Chrome cho bạn nhìn thấy từng dòng code chạy, giá trị biến, và điểm nào gây lỗi.

Console: vũ khí cơ bản

console.log() là cách debug nhanh nhất nhưng không phải duy nhất. Console còn có nhiều công cụ hữu ích khác:

// File: console.js
// console.log — in giá trị ra
console.log("user:", user)

// console.table — in object/array dạng bảng, dễ đọc hơn
console.table([{ name: "An", age: 25 }, { name: "Bình", age: 30 }])

// console.warn — cảnh báo (màu vàng)
console.warn("Dữ liệu cũ, nên refresh")

// console.error — lỗi (màu đỏ)
console.error("Không kết nối được server")

// console.time — đo thời gian chạy
console.time("sort")
arr.sort()
console.timeEnd("sort") // sort: 2.34ms

// console.group — nhóm log cho dễ đọc
console.group("User data")
console.log("Name:", user.name)
console.log("Email:", user.email)
console.groupEnd()

Breakpoint: dừng code tại bất kỳ dòng nào

Breakpoint cho phép bạn dừng code giữa chừng, xem giá trị tất cả biến tại thời điểm đó, rồi chạy từng dòng một. Mạnh hơn console.log rất nhiều vì bạn thấy TOÀN BỘ trạng thái.

// File: breakpoint.js
// Cách 1: thêm debugger vào code
function calculateTotal(items) {
  let total = 0
  for (const item of items) {
    debugger // ← Trình duyệt sẽ DỪNG ở đây
    total += item.price * item.quantity
  }
  return total
}

// Cách 2: mở DevTools (F12) → Sources → click số dòng
// → Chấm xanh xuất hiện = breakpoint đã đặt
// → Refresh trang → code dừng tại breakpoint

// Các nút điều khiển:
// ▶ Resume: chạy tiếp đến breakpoint kế
// ⤵ Step Over: chạy dòng tiếp theo (không vào trong hàm)
// ⤴ Step Into: chạy vào BÊN TRONG hàm được gọi
// ⤶ Step Out: chạy ra khỏi hàm hiện tại

DevTools tabs quan trọng

TabLàm gìKhi nào dùng
ConsoleXem log, chạy JS trực tiếpDebug nhanh, kiểm tra giá trị
SourcesXem source code, đặt breakpointDebug logic phức tạp
ElementsXem/sửa HTML + CSS liveDebug giao diện, layout
NetworkXem tất cả request HTTPDebug API, kiểm tra response
ApplicationXem localStorage, cookies, sessionDebug dữ liệu lưu trữ

Đọc Error Message đúng cách

// File: error.js
// Lỗi mẫu:
// TypeError: Cannot read properties of undefined (reading "name")
//     at getUserName (app.js:15:22)
//     at handleClick (app.js:8:10)

// Cách đọc:
// 1. Loại lỗi: TypeError — sai kiểu dữ liệu
// 2. Chi tiết: đọc "name" trên undefined → biến nào đó là undefined
// 3. Vị trí: app.js dòng 15, cột 22 → mở file, đến dòng 15
// 4. Call stack: handleClick gọi getUserName → lỗi ở getUserName

// Sai: đọc lỗi rồi Google nguyên câu
// Đúng: hiểu lỗi, kiểm tra biến tại dòng 15 xem vì sao undefined
💡 Rubber duck debugging

Giải thích code cho vịt cao su (hoặc bất kỳ ai/vật gì). Khi diễn đạt bằng lời, bạn buộc phải nghĩ rõ ràng — và thường tự phát hiện lỗi. Kỹ thuật này nghe buồn cười nhưng developer chuyên nghiệp dùng thật.

❓ Khi thấy lỗi "Cannot read properties of undefined", nghĩa là gì?

  • Dùng console.table, console.time ngoài console.log
  • Đặt breakpoint và debug từng dòng
  • Biết 5 tab chính trong DevTools
  • Đọc error message: loại lỗi + dòng code + call stack