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
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