Thứ Hai, 4 tháng 5, 2026

Debug là gì? Và cách debug cho người mới (không còn ngồi "đoán mò" nữa )

Một câu chuyện ngoài lề: Đang chạy xe thì xe bị...tắt máy! Bạn coi bình xăng: còn xăng. Vậy là do cái gì ta? Bạn mở nắp capo lên nhìn nhìn ngó ngó có vẻ rất "chiên da"...Rờ rờ mấy con vít, lắc lắc mấy sợi dây.


Quay vào xe với "hy vọng tràn trề" đề máy lại: Vẫn không có gì xảy ra...Trong lập trình, nhiều khi lính mới chúng ta sẽ gặp trường hợp tương tự nhiều lần cho đến khi...thuộc bài. Bạn viết code rất "điêu luyện" và... đẹp mắt.


Bạn bấm Run, rung đùi yên trí...sẽ chạy tốt!


Và…


LỖI!!


Bạn nhìn màn hình, rồi nhìn "đống" code.

  • 5 giây…
  • 10 giây…


Sau đó bắt đầu:

  • sửa linh tinh
  • thêm bớt vài dòng
  • copy Google
  • cầu nguyện 


Nếu bạn thấy quen quen…

Chúc mừng: bạn đang chưa biết debug 


Debug là quá trình tìm và sửa lỗi trong chương trình.


Lính mới thường debug bằng cách đoán mò, nhưng cách đúng là:

  • xác định lỗi
  • khoanh vùng
  • kiểm tra từng bước



Debug là gì?


Nói đơn giản:

Debug = tìm xem code của bạn sai ở đâu


Không phải:

  • sửa bừa
  • đoán mò
  • hy vọng nó chạy 


Debug là:

"điều tra hiện trường vụ án" 



Ví dụ thực tế 


Bạn bật đèn… nhưng không sáng


Căn bản là bạn có 2 cách:


Cách 1 (của newbie)

  • đập cái đèn
  • thay bóng. Hy vọng sẽ ổn!
  • không cần biết vì sao đèn không sáng!

may thì trúng 


Cách 2 (debug đúng nghĩa)

  • kiểm tra công tắc
  • kiểm tra ổ điện
  • kiểm tra bóng

tìm ra đúng chỗ hỏng


Code cũng y chang như vậy mà thôi.


Sai lầm lớn nhất của lính mới


Khi code lỗi, phán bằng cảm nhận từ...trái tim:

"Chắc do dòng này…"


  • rồi sửa
  • rồi lại lỗi
  • rồi sửa tiếp


Đây gọi là:

debug bằng niềm tin 


Và thường: mất 2 tiếng, vẫn không fix được



Cách debug kiểu dev "xịn sò" 


Bước 1: Đọc lỗi (đừng bỏ qua!)


Ví dụ:

Undefined index: username


Thay vì hoảng, hãy đọc:

"Undefined" → chưa tồn tại

"username" → key này


Lỗi đang "cố gắng" nói chuyện với bạn 


Bước 2: Xác định "chết ở đâu"


Thêm log:

echo "Code chạy đến bước 1";

echo "Code chạy đến bước 2";


Nếu chỉ thấy "bước 1"

Khả năng cao là lỗi nằm sau đó


Cách này: đơn giản, nhưng hiệu quả cực mạnh


Bước 3: In dữ liệu ra xem


  • Đừng đoán
  • Hãy nhìn


PHP:

var_dump($data);


Python:

print(data)


80% bug sẽ lộ mặt 


Bước 4: Thu nhỏ vấn đề


  • Code có 100 dòng → lỗi
  • Đừng nhìn toàn bộ 100 dòng


Hãy:

  • comment bớt
  • giữ lại phần nhỏ nhất


Giống như:

Tìm kim trong đống rơm,

Thông thượng thì dọn bớt rơm đi 


Bước 5: Test từng trường hợp


Ví dụ:

echo 10 / $x;


Test:

x = 2 → OK

x = 0 → Tai biến!


Bạn sẽ hiểu lỗi ngay



Ví dụ debug thực tế (rất quen mặt)


Code lỗi:

$username = $_POST['username'];

echo $username;


Lỗi:

Undefined index


Debug:


Bước 1: kiểm tra

var_dump($_POST);


Kết quả:

array(0) { }


Aha!

Hóa ra là: chưa submit form 


Fix:

$username = $_POST['username'] ?? '';



Một "tư duy" cực kỳ quan trọng


Khi code lỗi:

Đừng hỏi: "Vì sao nó lỗi???"


Hãy hỏi:

"Dữ liệu đang là gì?"

"Code chạy tới đâu?" Cái này rất quan trọng. Bạn có thể đơn giản dùng lênh in để xem code chạy tới đâu.


Bạn sẽ:

  • bình tĩnh hơn
  • debug nhanh hơn

Một sự thật hơi "đau"

Dev giỏi ≠ code không lỗi

Dev giỏi = debug nhanh hơn 




Checklist "chuẩn không cần chỉnh"


Lưu lại cái này, cực hữu ích:

  • Đọc lỗi kỹ
  • In dữ liệu ra
  • Xác định chỗ chết
  • Thu nhỏ code
  • Test từng case


Làm đúng 5 bước này: có lẽ bạn đã hơn 80% newbie



Tổng kết


Debug không phải kỹ năng "cao siêu"

Nó chỉ là:

  • kiểm tra
  • quan sát
  • suy luận


Nhưng:

Nếu không biết debug: Khả năng cao bạn sẽ "mắc kẹt" mãi 



FAQ nhanh


Có tool debug không?

Có (gdb, debugger…), nhưng lính mới nên bắt đầu bằng print/log


Debug có khó không?

Không, nếu có phương pháp


Bao lâu thì quen debug?

Sau vài chục lần "ăn hành" 



Bạn có thể cũng đang gặp:

Code chạy hôm qua, hôm nay lỗi

Undefined index

MySQL không connect