CodeGym /Các khóa học /Python SELF VI /Gỡ lỗi chương trình

Gỡ lỗi chương trình

Python SELF VI
Mức độ , Bài học
Có sẵn

8.1 Sự xuất hiện của lỗi (bugs)

Gỡ lỗi phần mềm là quá trình tìm kiếm và sửa chữa lỗi hoặc bugs trong chương trình. Quá trình này là phần thú vị và quan trọng nhất của phát triển phần mềm và giúp đảm bảo chương trình hoạt động chính xác.

Lịch sử xuất hiện thuật ngữ "bug"

Thuật ngữ "bug" (lỗi) trong ngữ cảnh các chương trình máy tính lần đầu tiên được sử dụng vào những năm 1940. Mặc dù khái niệm "bugs" đã tồn tại trước khi có máy tính, miêu tả các lỗi cơ khí trong các thiết bị khác nhau.

Trường hợp đầu tiên được ghi nhận về việc sử dụng thuật ngữ "bug" trong kỹ thuật máy tính là với một đội làm việc trên máy tính Mark II tại Đại học Harvard vào năm 1947(!). Đội phát hiện rằng một trong những rơ le của máy không hoạt động do một con bướm đêm rơi vào. Họ loại bỏ côn trùng và ghi lại điều này trong nhật ký như là "trường hợp đầu tiên phát hiện thực sự của côn trùng" (literal bug).

Mặc dù điều này không phải là trường hợp đầu tiên sử dụng thuật ngữ "bug" để chỉ lỗi, sự kiện này đã nổi tiếng và góp phần phổ biến thuật ngữ "bug".

Gỡ lỗi chương trình

Gỡ lỗi là quá trình tìm kiếm, chẩn đoán và sửa chữa các lỗi trong phần mềm. Quá trình gỡ lỗi bao gồm nhiều giai đoạn:

  • Phát hiện lỗi: Xác định các triệu chứng chỉ ra sự hiện diện của lỗi trong chương trình.
  • Tái hiện lỗi: Tạo các điều kiện tại đó lỗi xuất hiện một lần nữa, để hiểu rõ hơn về bản chất của nó.
  • Chẩn đoán vấn đề: Sử dụng các công cụ và phương pháp khác nhau để phân tích mã và tìm nguyên nhân của lỗi.
  • Sửa lỗi: Thực hiện các thay đổi trong mã để khắc phục lỗi.
  • Kiểm tra lại: Kiểm tra sửa lỗi và kiểm tra chương trình để đảm bảo rằng lỗi đã được khắc phục và không xuất hiện vấn đề mới.

Vậy bug là tên gọi chung cho bất kỳ lỗi nào trong các chương trình, còn de-bug là quá trình phát hiện và khắc phục những lỗi đó.

8.2 Công cụ và phương pháp gỡ lỗi

Ghi log

Thêm log vào mã chương trình cho phép theo dõi quá trình thực thi của nó và nhận thông tin về trạng thái của các biến và các hoạt động tại các điểm khác nhau trong quá trình thực thi chương trình. Đối với ghi log trong Python có thư viện tuyệt vời — logging.

Ví dụ về việc sử dụng ghi log:


import logging

# Cấu hình logging để xuất thông tin gỡ lỗi
logging.basicConfig(level=logging.DEBUG)
            

def divide(a, b):
    # Ghi log khi cố gắng chia
    logging.debug(f"Chia {a} cho {b}")
    if b == 0:
        # Ghi log lỗi, nếu b bằng 0
        logging.error("Cố gắng chia cho không!")
        return None

    # Thực hiện chia, nếu b không bằng 0
    return a / b
            
result = divide(10, 2)
print(result)

Sử dụng bộ gỡ lỗi (Debuggers)

Debuggers là các công cụ cho phép các lập trình viên thực hiện chương trình một cách từng bước, đặt các điểm dừng (breakpoints), kiểm tra giá trị của các biến và thay đổi chúng trong quá trình thực hiện chương trình.

Các debugger phổ biến:

  1. GDB: GNU Debugger cho C, C++ và các ngôn ngữ lập trình khác.
  2. PDB: Debugger tích hợp sẵn của Python.
  3. Visual Studio Debugger: Debugger tích hợp trong Microsoft Visual Studio.
  4. PyCharm Debugger: Debugger tích hợp trong IDE PyCharm cho Python.

Ví dụ về việc sử dụng PDB


import pdb

def faulty_function(a, b):
    pdb.set_trace()  # Đặt điểm dừng
    result = a / b
    return result
            
faulty_function(10, 0)

Khi chương trình đạt đến pdb.set_trace(), nó sẽ dừng lại, và bạn có thể thực hiện các lệnh debugger như next (bước tiếp theo), print (xuất giá trị của biến) và các lệnh khác.

Chúng ta sẽ cùng học cách debug chương trình bằng ví dụ về debugger tích hợp trong PyCharm.

8.3 Sử dụng debug

Về cơ bản, debug bao gồm việc sử dụng công cụ gỡ lỗi và thực hành để phát hiện và khắc phục lỗi.

Thiết lập điểm dừng: Đặt các điểm dừng trong mã, để dừng thực thi chương trình tại những nơi bạn quan tâm.

Thực thi từng bước: Thực hiện chương trình từng bước, quan sát sự thay đổi trạng thái của chương trình và giá trị của các biến.

Phân tích biến: Nghiên cứu giá trị của các biến và biểu thức ở các giai đoạn thực thi khác nhau của chương trình, để phát hiện dữ liệu không chính xác hoặc lỗi logic.

Sửa chữa lỗi: Thực hiện các thay đổi trong mã để khắc phục lỗi đã phát hiện.

Kiểm tra lại: Sau khi sửa chữa lỗi, kiểm tra lại chương trình để chắc chắn rằng lỗi đã được khắc phục và không xuất hiện vấn đề mới.

Trông thật đơn giản, phải không nào? Trong bài giảng tiếp theo, chúng ta sẽ đi qua tất cả các bước một cách chi tiết :)

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION