Làm thế nào để chạy python trong chế độ gỡ lỗi

Sau khi thêm các điểm ngắt với sự trợ giúp của các số được gán cho chúng, chúng ta có thể quản lý các điểm ngắt bằng lệnh bật và tắt và xóa. vô hiệu hóa yêu cầu trình gỡ lỗi không dừng khi đạt đến điểm dừng đó, trong khi bật bật các điểm dừng bị vô hiệu hóa

Ghi chú. các mẫu mã có thể được hiển thị không chính xác do đánh dấu. Tôi khuyên bạn nên tiếp tục đọc bài viết gốc trên blog của chúng tôi để đảm bảo tất cả các ví dụ được hiển thị chính xác

Gỡ lỗi không phải là một mẹo mới — hầu hết các nhà phát triển đều tích cực sử dụng nó trong công việc của họ. Tất nhiên, mọi người đều có cách gỡ lỗi của riêng mình, nhưng tôi đã thấy quá nhiều chuyên gia cố gắng phát hiện lỗi bằng cách sử dụng những thứ cơ bản như

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
2 thay vì các công cụ gỡ lỗi thực tế. Hoặc ngay cả khi họ đã sử dụng một công cụ sửa lỗi, thì họ cũng chỉ sử dụng một bộ tính năng nhỏ và không tìm hiểu sâu hơn về nhiều cơ hội mà các trình gỡ lỗi tốt mang lại. Và điều đó có thể đã tiết kiệm rất nhiều thời gian cho các chuyên gia đó

Gỡ lỗi Python bằng Lệnh in

Như đã đề cập ở trên, một số người trong chúng ta sử dụng 'in' để hiển thị thông tin tiết lộ những gì đang diễn ra bên trong mã. Một số người trong chúng tôi sử dụng trình ghi nhật ký cho cùng một mục đích — nhưng xin đừng nhầm lẫn điều này với trình ghi nhật ký cho mã sản xuất, vì tôi đang đề cập đến các nhà phát triển chỉ thêm trình ghi nhật ký trong thời gian tìm kiếm sự cố, tôi. e. chỉ cho đến khi quá trình phát triển kết thúc

Nhưng sự thật là,

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
2 có rất nhiều sơ hở. Có lẽ, nhược điểm lớn nhất của nó là bạn phải thêm các thay đổi vào mã của mình, sau đó chạy lại ứng dụng để xem biến khác mà bạn đang viết hoặc loại biến hiện tại chẳng hạn. Vì vậy, làm thế nào là một trình gỡ lỗi tốt hơn?

Lệnh trình gỡ lỗi Python

Về cơ bản, trình gỡ lỗi là một công cụ cung cấp cho bạn cách mở ứng dụng ở một vị trí nhất định để bạn có thể xem các biến, ngăn xếp cuộc gọi hoặc bất kỳ thứ gì bạn cần xem, đặt các điểm dừng có điều kiện, bước . Nó giống như mở mui xe của bạn để xem khói từ đâu, tìm kiếm từng phần để xác định vấn đề

Nếu bạn đang làm việc với Python, bạn không chỉ có thể xem qua mã trong khi gỡ lỗi mà còn có thể chạy mã được viết trong dòng lệnh hoặc thậm chí tác động đến quy trình bằng cách thay đổi giá trị của biến

Python có trình gỡ lỗi tích hợp có tên là

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
4. Đó là một tiện ích đơn giản với giao diện dòng lệnh thực hiện công việc chính. Nó có tất cả các tính năng của trình gỡ lỗi mà bạn sẽ cần, nhưng nếu bạn đang tìm cách cải tiến nó một chút, bạn có thể mở rộng nó bằng ipdb, tính năng này sẽ cung cấp cho trình gỡ lỗi các tính năng từ IPython

Cách dễ nhất để sử dụng

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
4 là gọi nó trong mã bạn đang làm việc

import pdb; pdb.set_trace[]

Ngay khi trình thông dịch đến dòng này, bạn sẽ nhận được dấu nhắc lệnh trên thiết bị đầu cuối nơi bạn đang chạy chương trình. Đây là lời nhắc chung của Python, nhưng với một số lệnh mới

danh sách [l]

Lệnh list[l] sẽ hiển thị cho bạn dòng mã mà trình thông dịch Python hiện đang bật. Nếu bạn muốn kiểm tra một vùng mã khác, lệnh này có các đối số cho dòng đầu tiên và dòng cuối cùng hiển thị. Nếu bạn chỉ cung cấp số của dòng đầu tiên, bạn sẽ thấy mã xung quanh dòng bạn đã cung cấp

lên [p] và xuống [d]

Lên[p] và xuống[d] là hai lệnh cần thiết để điều hướng qua ngăn xếp cuộc gọi. Ví dụ, với sự trợ giúp của các lệnh này, bạn có thể biết ai đang gọi hàm hiện tại hoặc tại sao trình thông dịch lại thực hiện theo cách này

[các] bước và tiếp theo [n]

Một cặp lệnh quan trọng khác, step[s] và next[n], giúp bạn tiếp tục thực hiện ứng dụng theo từng dòng. Sự khác biệt duy nhất giữa hai điều này là next[n] sẽ chỉ chuyển đến dòng tiếp theo của hàm hiện tại, ngay cả khi nó có lời gọi cho một hàm khác, nhưng [các] bước sẽ đi sâu hơn trong trường hợp như thế này

phá vỡ [b]

Lệnh break[b] cho phép bạn thiết lập các điểm ngắt mới mà không cần thay đổi mã. Nó cần giải thích thêm một chút, vì vậy tôi sẽ đi vào chi tiết bên dưới

Dưới đây là tổng quan ngắn về các lệnh

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
4 khác

Bạn cũng có thể thích

Mẹo tối ưu hóa hiệu suất Django

Tôi thường gặp phải một tình huống lặp đi lặp lại khi các nhà phát triển nhận nhiệm vụ thực hiện tối ưu hóa hiệu suất trên Django…

djangostars. com

Hợp nhất Django ORM với SQLAlchemy để phân tích dữ liệu dễ dàng hơn

Phát triển sản phẩm Django thường dễ dàng và đơn giản. tài liệu tuyệt vời, nhiều công cụ vượt trội…

djangostars. com

Trình gỡ lỗi Python trước

Trước đây, cần phải thay đổi mã để in nội dung nào đó hoặc đặt điểm dừng. Tuy nhiên, khá thường xuyên, bạn cần đặt điểm dừng bên trong gói của bên thứ ba. Tất nhiên, bạn có thể mở mã nguồn của thư viện bất kỳ lúc nào từ môi trường ảo của mình và thêm lệnh gọi cho

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
4

Nhưng bây giờ bạn có thể chạy ứng dụng từ trình gỡ lỗi và đặt các điểm ngắt mà không có bất kỳ thay đổi nào trong mã nguồn. Để thực thi ứng dụng với trình gỡ lỗi, hãy sử dụng lệnh

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
8

Để tôi chỉ cho bạn một ví dụ. Tôi có ứng dụng đơn giản này để theo dõi thời gian làm việc của tôi. Bên trong nó, tôi sử dụng thư viện

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
0 để thực hiện các yêu cầu HTTP và tôi muốn ngắt một yêu cầu đăng bài. Làm thế nào để tôi làm điều này?

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c

Như bạn có thể thấy, bạn không cần nhập đường dẫn đầy đủ đến tệp nguồn. Bạn chỉ cần đặt một đường dẫn tương đối từ bất kỳ thư mục nào trong

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
2, giống như cách bạn nhập vào mã của mình

Giờ đây, việc đặt điểm dừng trở nên dễ dàng hơn. Không cần phải đặt nó ở đâu đó trong mã của riêng bạn và đi từng bước đến chức năng bạn cần hoặc tìm tệp nguồn thư viện và thay đổi nó

Nhưng nếu ứng dụng thực hiện nhiều cuộc gọi và bạn cần một cuộc gọi cụ thể thì sao? . Bạn có thể chỉ định một điều kiện điểm ngắt và trình gỡ lỗi sẽ chỉ ngắt ứng dụng nếu điều kiện này được coi là Đúng

Trong ví dụ này, ứng dụng sẽ chỉ bị hỏng nếu

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
3 có khóa
$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
4

python -m pdb run.py  
> /Users/...../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555, json is not None and 'time_entry' in json
Breakpoint 1 at /Users/....../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
Trợ giúp gỡ lỗi cho Django

Nếu bạn đang sử dụng khung web Django, bạn có thể biết rằng nếu

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
5 được đặt thành
$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
6 trong cài đặt của mình, thì trên bất kỳ ngoại lệ nào, bạn sẽ thấy một trang đặc biệt có thông tin như loại ngoại lệ và thông báo, truy nguyên, biến cục bộ, v.v.

Nếu bạn muốn cải thiện trang gỡ lỗi của mình như thế này, hãy cài đặt tiện ích mở rộng django và sử dụng lệnh

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
7 để khởi động máy chủ Django của bạn để phát triển. Và trong trường hợp bạn cần thiết lập mã pin trình gỡ lỗi, đây là ví dụ về cách bạn thực hiện

$ python -m pdb run.py
> /Users/.........................../run.py[1][]
-> from TimeLog.app import run_app
[Pdb] b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555
[Pdb] c
8

Nếu bạn sử dụng tiện ích mở rộng django thay vì trang mặc định này, bạn sẽ nhận được trang theo dõi nơi bạn có thể xem mã cho từng dòng và trình gỡ lỗi đang mở

Quá trình sửa lỗi được thực hiện với sự trợ giúp của dự án Werkzeug, đây là thư viện WSGI dành cho Python

Như bạn có thể thấy, có rất nhiều cách để sử dụng trình gỡ lỗi. Nó không quá phức tạp nhưng đồng thời sẽ mang lại cho bạn vô số lợi thế — bạn không chỉ có được danh tiếng là một nhà phát triển tuyệt vời mà còn tiết kiệm cho mình rất nhiều thời gian và năng lượng cũng như học cách tránh . Và, tất nhiên, cả sản phẩm và khách hàng của bạn đều sẽ thắng nếu bạn sử dụng trình gỡ lỗi phù hợp. Vì vậy, nó thực sự là một chiến thắng cùng có lợi cho tất cả mọi người

Hướng dẫn gỡ lỗi với pdb này ban đầu được đăng trên blog Django Stars

Nếu bạn thấy bài viết này hữu ích, vui lòng nhấn vào nút 👏 bên dưới. ]

✉️ Đăng ký Email Blast mỗi tuần một lần của CodeBurst, 🐦 Theo dõi CodeBurst trên Twitter, xem 🗺️ Lộ trình dành cho nhà phát triển web năm 2018 và 🕸️ Tìm hiểu về phát triển web Full Stack

Cách tốt nhất để gỡ lỗi trong Python là gì?

Công cụ tốt nhất để gỡ lỗi Python .
lính gác. Sentry là một công cụ theo dõi lỗi và theo dõi hiệu suất có thể chẩn đoán và giải quyết các vấn đề về python. .
Pycharm. Pycharm là một IDE tập trung vào python có một số công cụ gỡ lỗi python tốt nhất hiện có. .
thanh lăn. .
cài đặt. .
Visual Studio. .
súng ngắn. .
trục trặc. .
IDE Komodo

Có trình gỡ lỗi cho Python không?

Python có trình gỡ lỗi tích hợp gọi là pdb. Đó là một tiện ích đơn giản với giao diện dòng lệnh thực hiện công việc chính. Nó có tất cả các tính năng của trình gỡ lỗi mà bạn sẽ cần, nhưng nếu bạn đang tìm cách cải tiến nó một chút, bạn có thể mở rộng nó bằng cách sử dụng ipdb, tính năng này sẽ cung cấp cho trình gỡ lỗi các tính năng từ IPython

Gỡ lỗi mã Python có nghĩa là gì?

Sử dụng trình gỡ lỗi

Chủ Đề