Thứ Tư, 8 tháng 7, 2026

Vì sao bug lúc có lúc không? (Hôm qua chạy ngon. Hôm nay lỗi. Mai lại... tự hết. Đây là bug hay là tâm linh?)

Một sáng đẹp trời bạn ghé vào quán bún bò Huế quen thuộc...Nhưng sao hôm nay hương vị lại khác lạ, không ngon như trước...

Có một loại bug.

Đáng sợ hơn cả Fatal Error.

Đáng ghét hơn cả Parse Error.

Và khiến lập trình viên mất ngủ nhiều nhất.

Đó là...

Bug lúc có lúc không.

😭

Hôm qua.

Website chạy ngon.

😎

Sáng nay.

Lỗi.

😱

Chiều.

Tự hết.

🤡

Khách hàng bảo:

"Em vừa bấm thì lỗi."

Bạn thử.

...

Không lỗi.

😅

Khách hàng quay video gửi.

Đúng là lỗi thật.

Bạn mở lại.

...

Vẫn không lỗi.

😭

Nếu bạn từng gặp tình huống này.

Xin chúc mừng.

Bạn đã bước vào một "cấp độ mới" của nghề lập trình.


Bug lúc có lúc không là gì?

Bug lúc có lúc không (Intermittent Bug) là lỗi chỉ xuất hiện trong một số điều kiện nhất định, không xảy ra liên tục nên rất khó tái hiện và debug.

Nguyên nhân thường liên quan đến:

  • Session
  • Cookie
  • Cache
  • Dữ liệu đầu vào
  • Thời gian
  • Trình duyệt
  • Hoặc môi trường chạy chương trình.



Ví dụ đời thường 🚗

Hãy tưởng tượng.

Xe của bạn.

Suốt một tháng.

Đi bình thường.

😄

Đến đúng hôm trời mưa.

Xe không nổ máy.

😅

Hôm sau.

Nắng đẹp.

Lại chạy bình thường.

Lỗi không biến mất.

Nó chỉ...

Chưa gặp đúng điều kiện để xuất hiện.

Bug trong lập trình cũng vậy.


"Máy em chạy mà..." 🤡

Đây có lẽ là câu nói nổi tiếng nhất.

Khách hàng:

"Website lỗi."

Lập trình viên:

"Máy em chạy bình thường."

😄

Cả hai.

Đều nói thật.

Vì...

Khách dùng:

Safari.

Bạn dùng:

Chrome.

Khách dùng:

iPhone.

Bạn dùng:

Windows.

Khách đăng nhập từ hôm qua.

Bạn vừa đăng nhập lại.

Điều kiện khác nhau.

Kết quả khác nhau.


Session - Thủ phạm quen thuộc 😅

Ví dụ.

Người dùng đã đăng nhập.

Session còn.

Website hoạt động.

Người khác.

Session hết hạn.

Website báo lỗi.

😄

Nếu bạn chỉ test bằng tài khoản của mình.

Rất có thể.

Bạn sẽ không bao giờ thấy lỗi đó.


Cache - "Đã sửa rồi mà vẫn lỗi?" 🤯

Đây là tình huống rất quen.

Bạn sửa code.

Upload.

Refresh.

...

Website vẫn như cũ.

😭

Bạn sửa thêm lần nữa.

Không được.

Một tiếng sau.

Tự nhiên.

Website đúng.

🤡

Không phải phép màu.

Rất có thể.

Cache vẫn đang lưu phiên bản cũ.

Đây cũng là lý do bài tiếp theo của chúng ta sẽ nói về:

Cache là gì?

😎


Dữ liệu đầu vào khác nhau

Ví dụ.

Bạn test.

Tên:

Nam

Không lỗi.

Khách nhập:

Nguyễn Văn Nam

Vẫn ổn.

Người khác nhập:

Nguyễn Văn Nam ❤️

🤡

Hoặc:

O'Connor

Có dấu nháy.

Lỗi xuất hiện.

Không phải vì chương trình ghét khách hàng.

Mà vì...

Bạn chưa kiểm tra đủ dữ liệu đầu vào.


Hôm qua chạy, hôm nay chết 😭

Có những bug.

Không liên quan đến code.

Ví dụ.

Website lấy:

Ngày hiện tại.

date("Y-m-d")

Ngày 31.

Chạy.

Sang ngày 1.

Lỗi.

😅

Hoặc.

Đúng giao thừa.

Đúng cuối tháng.

Đúng năm nhuận.

Bug xuất hiện.

Những lỗi này hiếm.

Nhưng rất thật.


Database cũng có thể là nguyên nhân

Lúc test.

Database có:

10 dòng.

Nhanh.

😄

Sau một năm.

Có:

2 triệu dòng.

Website bắt đầu chậm.

Timeout.

Người dùng tưởng website bị lỗi.

Đó là lý do chúng ta vừa học bài:

Vì sao database chạy chậm dần?


InfinityFree Case 😅

Có bạn hỏi mình.

"Anh ơi.

Em đăng nhập được.

Bạn em lại không."

Sau khi kiểm tra.

Mới phát hiện.

Bạn ấy viết:

if($username=="admin")

Trong database.

Tên tài khoản là:

Admin

Máy của bạn ấy.

Luôn đăng nhập bằng:

admin.

Không sao.

Người khác.

Đăng nhập:

Admin.

Lỗi.

Chỉ khác một chữ hoa.

😅


Một hiểu lầm rất phổ biến 🤡

Nhiều người nghĩ.

Bug lúc có lúc không.

Là do máy tính "điên".

Không.

Máy tính rất "ngoan".

Nó luôn làm đúng.

Chỉ là.

Có một điều kiện nào đó.

Bạn chưa nhìn thấy.

😎


Hãy học cách tái hiện lỗi

Đây là kỹ năng cực kỳ quan trọng.

Đừng chỉ hỏi:

"Có lỗi không?"

Hãy hỏi.

✔ Bấm nút nào?

✔ Nhập dữ liệu gì?

✔ Dùng trình duyệt nào?

✔ Đăng nhập chưa?

✔ Điện thoại hay máy tính?

✔ Lỗi xuất hiện lúc mấy giờ?

✔ Có chụp màn hình không?

Càng nhiều thông tin.

Càng dễ tìm ra bug.


Echo và var_dump lại xuất hiện 😄

Lúc bug khó hiểu.

Đừng sửa ngay.

Hãy:

echo "Đã vào bước 1";

var_dump($_SESSION);

var_dump($_POST);

Thu hẹp từng bước.

Rồi bug sẽ lộ diện.

Đó chính là lý do chúng ta học hai bài trước.


Một mẹo cực hay 😎

Nếu khách hàng báo:

"Lúc nãy lỗi.

Giờ hết rồi."

Đừng vội đóng ticket.

Hãy hỏi.

"Anh/chị có nhớ trước khi lỗi xảy ra đã làm những bước nào không?"

Rất nhiều bug được tìm ra.

Chỉ nhờ câu hỏi này.


Debug kiểu dev thật 😎

✅ 1. Đừng cố đoán

Hãy tái hiện lỗi.

✅ 2. Kiểm tra dữ liệu đầu vào

Nhiều bug chỉ xuất hiện với một loại dữ liệu đặc biệt.

✅ 3. Kiểm tra Session và Cookie

Đây là hai nguyên nhân rất phổ biến.

✅ 4. Hỏi đúng câu hỏi

Đừng chỉ hỏi:

"Có lỗi không?"

Hãy hỏi:

"Lỗi xảy ra như thế nào?"

✅ 5. Ghi lại các bước

Nếu đã tái hiện được bug.

Hãy ghi lại.

Đừng tin vào trí nhớ.

😄


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

☑ Tái hiện lỗi trước khi sửa

☑ Kiểm tra Session

☑ Kiểm tra dữ liệu đầu vào

☑ Kiểm tra Cache

☑ Dùng echo và var_dump()

☑ Ghi lại các bước xảy ra lỗi


FAQ nhanh

Vì sao mình không thấy lỗi nhưng khách hàng lại thấy?

→ Vì hai người có thể đang sử dụng những điều kiện hoàn toàn khác nhau.

Bug lúc có lúc không có sửa được không?

→ Có.

Quan trọng nhất là tìm được điều kiện khiến bug xuất hiện.

Có nên sửa ngay khi chưa tìm ra nguyên nhân?

→ Không.

Sửa khi chưa hiểu nguyên nhân thường tạo ra thêm bug mới.

Đây có phải lỗi của PHP không?

→ Phần lớn là không.

Thường do logic chương trình hoặc môi trường chạy.


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

👉 White Screen of Death – Trang trắng xóa không báo lỗi

👉 Fatal Error trong PHP là gì?

👉 Parse Error là gì?

👉 Undefined Variable là gì?

👉 var_dump() là "vũ khí bí mật" của newbie

👉 echo debug và nghệ thuật "soi từng bước"

👉 Comment code đúng cách để khỏi tự giết mình

👉 PHP login đúng password nhưng vẫn fail

👉 Vì sao $_POST bị rỗng?


Tổng kết

Người mới thường nghĩ.

Bug là thứ xuất hiện ngẫu nhiên.

Thực ra.

Bug rất "có nguyên tắc".

Nó chỉ xuất hiện khi hội đủ những điều kiện nhất định.

Giống như một ổ gà trên đường.

Ngày nắng.

Bạn chạy chậm.

Không sao.

Ngày mưa.

Chạy nhanh.

Không nhìn thấy.

Xe sụp xuống.

Ổ gà vẫn ở đó.

Chỉ là hôm nay bạn mới đi đúng vào nó.

Bug cũng vậy.

Nó không tự sinh ra.

Không tự biến mất.

Nó chỉ đang chờ đúng thời điểm để lộ diện.

Và nếu bạn chỉ nhớ một điều từ bài này, hãy nhớ:

Đừng hỏi: "Tại sao lúc có lúc không?"

Hãy hỏi: "Điều kiện nào khiến lỗi xuất hiện?"

Chỉ cần trả lời được câu hỏi đó.

Bạn đã đi được hơn nửa chặng đường để sửa bug rồi. 🚀