Debug Có Khó Không? Làm Sao Để Debug Dễ Dàng
NỘI DUNG BÀI VIẾT
“Gỡ lỗi khó gấp đôi so với viết mã ngay từ đầu. Dù cho bạn có viết code một cách khéo léo nhất có thể, thì bug vẫn đâu đó quanh code của bạn thôi. Tin tôi đi, đó là sự thật.”
Vậy tại sao gỡ lỗi lại khó như vậy?
Vì nó vô cùng phức tạp, tất nhiên. Ngay cả những ứng dụng đơn giản nhất cũng được xây dựng trên nền tảng code khổng lồ. Các lập trình viên hiện đại nhận được nhiều tool miễn phí để dùng nhưng họ không thực sự hiểu chúng.
Hệ thống rất phức tạp, nhưng đầu vào cũng có thể gây ra sự cố. Bạn sẽ thường xuyên gặp phải trường hợp người dùng cuối có một số lỗi nhưng bạn không thể nhìn thấy lỗi đó trên máy của mình. Lỗi có thể liên quan đến cấu hình hoặc phụ thuộc vào phiên bản trình duyệt hoặc chuỗi sự kiện. Một số lỗi hoạt động theo nhóm và làm mờ hình ảnh nhiều hơn.
Ngoài ra, một lỗi có thể tạo ra nhiều lỗi khác nhau. Để làm cho vấn đề tồi tệ hơn, việc sửa lỗi thường có thể tạo ra những lỗi mới. Nó thường cho biết thiếu các test case hoặc các bản vá lỗi cẩu thả được triển khai mà không thực sự hiểu mã.
Làm thế nào để debug tốt hơn?
Tất cả chúng ta đều thừa nhận rằng gỡ lỗi rất khó, nhưng làm thế nào chúng ta có thể debug dễ dàng hơn?
1. Tìm lỗi
Để tìm hiểu cách gỡ lỗi, chúng ta cần hiểu một điều: Không phải là thêm/xóa hoặc ghi lại mọi thứ. Phần thiết yếu của gỡ lỗi không liên quan gì đến việc nhập cái gì vào hay xóa cái gì đi. Nó liên quan đến tư duy logic và giải quyết vấn đề.
Trước khi bắt đầu gỡ lỗi, bạn cần suy nghĩ và phân tích code của mình. Bạn nghĩ điều gì đã xảy ra sai? Dù lỗi là gì, chỉ sau vài phút suy nghĩ sâu hơn, bạn sẽ có một giả định cho việc gây ra bug. Thậm chí có thể là một vài trường hợp.
Bước tiếp theo là gì?
Kiểm tra giả định của bạn bắt đầu từ khả năng lớn nhất gây ra lỗi cho đến các khả năng khác. Kiểm tra có thể bao gồm việc thay đổi đầu vào (ví dụ: kích thước hoặc định dạng tệp khác nhau để tải lên), sử dụng trình duyệt khác hoặc comment về các phần code mà bạn cho là OK. Mục đích là để thu hẹp lỗi càng nhiều càng tốt.
Bây giờ bạn sẽ khá tự tin về vị trí của lỗi. Nếu không, có một kỹ thuật bổ sung có thể giúp bạn: Chia để trị.
Bản chất của việc chia để trị rất đơn giản. Bạn cắt codebase của mình làm đôi và sử dụng nhật ký để kiểm tra xem lỗi có ở nửa đầu hay nửa sau hay không. Bây giờ cắt đôi phần lỗi một lần nữa. Lặp lại quá trình cho đến khi bạn thu hẹp lỗi xuống chỉ còn một vài dòng mã.
2. Sửa lỗi
Bạn đã tìm thấy lỗi. Bây giờ là lúc để fix bug thôi.
Nhưng đừng có dại dột mà viết mã ngay lập tức nhé. Như mọi khi với gỡ lỗi, suy nghĩ quan trọng hơn làm.
Bạn có hiểu các đầu vào và đầu ra và quy trình của ứng dụng không? Để thực sự biết tại sao lỗi lại xảy ra, bạn phải điều chỉnh mô hình của mình cho thực tế. Đôi khi có thể khắc phục sự cố nhanh chóng nhưng có thể bạn không hiểu hết những gì đang xảy ra. Tìm hiểu tất cả các trường hợp gây ra lỗi. Hãy thử kiểm tra với các đầu vào ngẫu nhiên. Nó có hoạt động như mong đợi không?
Sau khi khắc phục, hãy thử lại tất cả các trường hợp (cả thành công và không thành công). Nếu bạn đã khắc phục sự cố mà vẫn không chắc chắn lỗi ở đâu thì công việc của bạn chưa hoàn thành. Tiếp tục đào sâu suy nghĩ và tìm hiểu các giả định xung quanh cho đến khi bạn hoàn toàn hiểu những gì đang xảy ra và khi nào. Nếu không, bạn sẽ lại vấp phải lỗi đó – có thể ở một nơi khác – và bạn vẫn không biết chuyện gì đang xảy ra.
Tạm kết
Bạn có thể tự hỏi, “Bản fix lỗi có hoạt động không?” Đúng! Tôi đã cố gắng làm cho nó hoạt động và ứng dụng vẫn đang chạy.
Nhưng trên tực tế, tôi đã làm việc trên các đối tượng lớn được trả về từ cơ sở dữ liệu và có nhận thức sai về một số thuộc tính. Lỗi này có vẻ như là một lỗi đơn giản trong logic boolean, nhưng đó là một sự hiểu lầm rất lớn của hệ thống.
Sự việc này nhắc nhở tôi không nên coi thường bất cứ điều gì. Lập trình thật khó. Gỡ lỗi còn khó hơn gấp nhiều lần. Đôi khi những lỗi tưởng như đơn giản lại có thể giúp bạn phát hiện ra một lỗ hổng lớn trong mô hình của mình. Học từ những sai lầm.
Bạn có lần debug đi vào lòng đất nào không? Hãy kể lại cho tôi nghe nhé?
Nguồn: https://codelearn.io/sharing/lam-sao-de-debug-de-dang
Leave a Reply