Các phương pháp gỡ lỗi trong Python cơ bản và hiện đại nhất

Các phương pháp gỡ lỗi nhanh triển khai với Python

Chia sẻ kiến thức 18/01/2022

Gỡ lỗi (debug) là một trong những phần quan trọng nhất của công việc phát triển phần mềm. Khi độ phức tạp của hệ thống không ngừng tăng lên mỗi ngày, các phương pháp gỡ lỗi tiên tiến hơn đang ra đời ngày càng nhiều để đáp ứng nhu cầu thực tế. Ngày nay, hầu hết việc debug đã được thực thi đồng thời khi hệ thống đang chạy trực tiếp. 

Bài viết này đề cập đến hầu hết các phương pháp gỡ lỗi Python hiện nay. Đây là những phương pháp cơ bản và hiện đại. Ngoài ra, bài viết cũng sẽ giới thiệu một số công cụ thực hành và chia sẻ một số cấu hình và hướng dẫn cơ bản. Hy vọng rằng lập trình viên có thể tham khảo vào công việc của mình thông qua bài viết này. 

gỡ lỗi

1. Các phương pháp gỡ lỗi cơ bản

1.1 Log

Áp dụng các chương trình log-in là bắt buộc, nó giúp chúng ta ghi lại lỗi nằm ở đâu và ghi lại thông tin cần thiết về những gì đang xảy ra trong một chương trình đang chạy. Có rất nhiều use case từ cơ bản và nâng cao cho phương pháp log. Dưới đây là một số use case cơ bản.

1.1.1 Nhập và đặt cấp độ log 

import logging

from pathlib import PurePosixPath

 

logger = logging.getLogger(__name__)

logger.setLevel(level=logging.INFO)

Các cấp độ log khác nhau sẽ ra thông tin log khác nhau. Sau khi bạn đặt các log level, modul sẽ xuất ra tất cả các log level ở cấp độ cao. Bạn có thể đặt các trình log riêng biệt cho các chương trình khác nhau, sau đó đặt chúng trong một file cài đặt chung (logfile), chẳng hạn như .yaml, hơn là đặt nó trong chính source code. 

1.1.2 Log in file

formatter = logging.Formatter(‘%(message)s’)

# log into file

log_file = PurePosixPath(log_dir)/(datetime.datetime.now().strftime(‘%Y-%m-%d-%H-%M-%S.log’))

handler = logging.FileHandler(log_file)

handler.setLevel(logging.INFO)

handler.setFormatter(formatter)

logger.addHandler(handler)

1.1.3 Log in terminal

Nếu bạn muốn xem các log có dấu thời gian trong bảng điều khiển đầu cuối của mình, lệnh sau là cách phù hợp để làm như vậy:

# log into terminal

console = logging.StreamHandler()

console.setFormatter(formatter)

console.setLevel(logging.INFO)

logger.addHandler(console)

logger.info(datetime.datetime.now().strftime(‘%Y-%m-%d: %H %M %S’))

1.2 Breakpoint

Các breakpoint được sử dụng phổ biến khi bạn muốn phân tích một hàm. Thông thường, bạn cần đặt ít nhất hai breakpoint trong source code. Sau khi chạy chương trình, lệnh chạy sẽ dừng lại ở breakpoint đầu tiên. Sau đó, bạn vào trong hàm để kiểm tra theo từng bước (step).

Trong quá trình di chuyển theo từng dòng, các biến và giá trị của chúng sẽ hiển thị và bạn có thể theo dõi sự thay đổi để xem hàm hoạt động như thế nào, từ đó phát hiện ra vị trí lỗi.

1.3 Print out

Phương pháp này tương đối khó. Nó chủ yếu được áp dụng khi bạn không thể tìm ra lỗi hoặc sự cố đến từ đâu. Bạn có thể xuất ra một dãy số hoặc các chuỗi dữ liệu khác để xác định vị trí mà lỗi xuất hiện.

>>> Tìm hiểu thêm: Khóa học Lập trình Python cơ bản

2. Các phương pháp gỡ lỗi Python hiện đại hàng đầu

2.1 Gỡ lỗi từ xa

Gỡ lỗi vốn là một khái niệm được sử dụng trong trường hợp ngắt hệ thống để xử lý lỗi. Ngày nay, các thao tác ngoại tuyến không còn đáp ứng nhu cầu ở trạng thái đang chạy vì bạn hầu như không thể tắt các dịch vụ để gỡ lỗi.

Gỡ lỗi từ xa đã trở thành lựa chọn tốt nhất trong tình huống này. Sự khác biệt chính giữa gỡ lỗi từ xa và gỡ lỗi là về cấu hình bổ sung. Tuy nhiên, các nguyên tắc chính yếu là hoàn toàn giống nhau. Nó giúp tiết kiệm đáng kể thời gian, phù hợp khi bạn dùng microservices, và phù hợp với các hệ thống hoặc dịch vụ phân tán.

Các thành phần chính để gỡ lỗi từ xa là máy chủ từ xa (remote server); đường dẫn truy cập từ xa (remote access tunnel); chương trình gỡ lỗi; máy local.

Yêu cầu bắt buộc trong gỡ lỗi từ xa là thiết lập kết nối với máy chủ từ xa. Visual Studio giới thiệu ít nhất bốn phương pháp gỡ lỗi từ xa trong hướng dẫn của họ. Cách thuận tiện và an toàn nhất là sử dụng ssh tunnel.  Sau khi xây dựng kết nối ssh, bạn có thể gỡ lỗi như các cách phía trên. 

2.2 Gỡ lỗi bằng cách đảo ngược (Reverse)

Bạn cũng có thể gỡ lỗi thông qua cách truy tìm lại lịch sử gỡ lỗi đã hoàn thành của mình. Đó là phương pháp đảo ngược. Các lập trình viên thường gặp sự cố tại một số điểm khi gỡ lỗi. Trong hầu hết các trường hợp, họ không thể tìm thấy các giá trị trong bước gỡ lỗi cuối cùng và họ phải bắt đầu lại quá trình để tìm ra điều đó.

2.3 Sử dụng trình gỡ lỗi du hành thời gian (time travel debuggẻ)

Bạn có thể sử dụng PyTrace – một công cụ gỡ lỗi bằng phương pháp time travel. Để sử dụng nó, bạn cần cài đặt thư viện pycrunch-trace và thêm decorator @trace vào trước một hàm như sau:

from pycrunch_trace.client.api import trace

@trace

def function():

    your_code()

Sau khi bạn chạy lệnh của mình, các bản ghi sẽ được lưu trong thư mục làm việc của bạn. Mở tệp HTML thông qua ứng dụng web để kiểm tra. Sau đó, bạn có thể truy ngược trở lại và chuyển tiếp thông qua gỡ lỗi.

>>> Đọc ngay: Học lập trình game với Python cho người mới bắt đầu dễ nhất

3. Kết luận

Trong các tình huống hệ thống phức tạp, phương pháp gỡ lỗi hiện đại có hiệu quả hơn nhiều so với các phương pháp cơ bản trước đây. Tùy thuộc vào quy mô của phần mềm bạn đang thực hiện để lựa chọn phương pháp gỡ lỗi thuận tiện nhất. Nếu nó chỉ là một chức năng đơn lẻ, có thể dùng các phương pháp cơ bản. Không có giải pháp tốt nhất cho mọi trường hợp, nhưng bạn nên có ít nhất một giải pháp tốt nhất cho một tình huống. Chúc bạn thành công. 

>>> Nếu bạn đang có nhu cầu tìm hiểu về khóa học lập trình đi làm ngay. Hãy liên hệ với FUNiX ngay tại đây:

>>> Xem thêm chuỗi bài viết liên quan:

Lập trình game bằng Python đơn giản cho người mới bắt đầu

Lập trình game bằng Python là gì? 5 lợi thế Python trong lập trình game

https://funix.edu.vn/chia-se-kien-thuc/vai-tro-cua-python-trong-phan-tich-du-lieu/

8 ý tưởng dự án Python phù hợp cho người mới bắt đầu

Nguyên Chương

dịch từ: https://hackernoon.com/top-debugging-methods-for-quicker-deployment-in-python 

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
Chat với FUNiX GPT ×

yêu cầu gọi lại

error: Content is protected !!