Trong Java / C #, bạn có thể dễ dàng chuyển qua mã để theo dõi những gì có thể xảy ra và IDE làm cho quy trình này trở nên thân thiện với người dùng.
Bạn có thể theo dõi thông qua mã python theo cách tương tự?
Trong Java / C #, bạn có thể dễ dàng chuyển qua mã để theo dõi những gì có thể xảy ra và IDE làm cho quy trình này trở nên thân thiện với người dùng.
Bạn có thể theo dõi thông qua mã python theo cách tương tự?
Câu trả lời:
Đúng! Có một trình gỡ lỗi Python được gọi pdb
chỉ để làm điều đó!
Bạn có thể khởi chạy chương trình Python thông qua pdb
bằng cách sử dụng pdb myscript.py
hoặc python -m pdb myscript.py
.
Có một số lệnh sau đó bạn có thể ban hành, được ghi lại trên pdb
trang.
Một số điều hữu ích cần nhớ là:
b
: đặt điểm dừngc
: tiếp tục gỡ lỗi cho đến khi bạn đạt điểm dừngs
: bước qua mãn
: để đi đến dòng mã tiếp theol
: liệt kê mã nguồn cho tệp hiện tại (mặc định: 11 dòng bao gồm cả dòng đang được thực thi)u
: điều hướng lên khung stackd
: điều hướng xuống khung stackp
: để in giá trị của biểu thức trong ngữ cảnh hiện tạiNếu bạn không muốn sử dụng trình gỡ lỗi dòng lệnh, một số IDE như Pydev , Wing IDE hoặc PyCharm có trình gỡ lỗi GUI. Wing và PyCharm là các sản phẩm thương mại, nhưng Wing có phiên bản "Cá nhân" miễn phí và PyCharm có phiên bản cộng đồng miễn phí.
pudb
thật tuyệt vời cho điều đó. Ngoài rapydev
pdb
không phải là một công cụ dòng lệnh. Để sử dụng nó, sử dụng python -m pdb your_script.py
.
Bước đầu tiên là làm cho trình thông dịch Python chuyển sang chế độ gỡ lỗi.
A. Từ dòng lệnh
Cách thẳng nhất, chạy từ dòng lệnh, của trình thông dịch python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Trong phiên dịch
Trong khi phát triển các phiên bản đầu tiên của các mô-đun và để thử nghiệm nó lặp đi lặp lại nhiều hơn.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. Từ trong chương trình của bạn
Đối với một dự án lớn và mô-đun chạy dài, có thể bắt đầu gỡ lỗi từ bên trong chương trình bằng cách nhập pdb và set_trace () như thế này:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
Từng bước gỡ lỗi để đi sâu vào nội bộ hơn
Thực hiện câu lệnh tiếp theo, với trò chơi nv (tiếp theo)
Lặp lại lệnh gỡ lỗi cuối cùng với ENTER
Bỏ tất cả ... với “q” (bỏ)
In giá trị của biến số với P khắc (in)
a) pa
Tắt lời nhắc (Pdb) với “c” (tiếp tục)
Thấy bạn đang ở đâu ... với “l” (danh sách)
Bước vào chương trình con ... với “s” (bước vào)
Tiếp tục, nhưng đến cuối chương trình con hiện tại, với R r thì (trở lại)
Gán một giá trị mới
a) ! b = "B"
Đặt điểm dừng
a) phá vỡ vải lanh
b) phá vỡ tên hàm
c) phá vỡ tên tệp: vải lanh
Điểm dừng tạm thời
a) vải lanh
Điểm dừng có điều kiện
a) phá vỡ vải lanh, điều kiện
Lưu ý: ** Tất cả các lệnh này phải được thực thi từ ** pdb
Để có kiến thức chuyên sâu, hãy tham khảo: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Có một mô-đun gọi là 'pdb' trong python. Ở đầu tập lệnh python của bạn, bạn làm
import pdb
pdb.set_trace()
và bạn sẽ vào chế độ gỡ lỗi. Bạn có thể sử dụng 's' để bước, 'n' để theo dõi dòng tiếp theo tương tự như những gì bạn sẽ làm với trình gỡ lỗi 'gdb'.
Bắt đầu trong Python 3.7, bạn có thể sử dụng hàm breakpoint()
dựng sẵn để vào trình gỡ lỗi:
foo()
breakpoint() # drop into the debugger at this point
bar()
Theo mặc định, breakpoint()
sẽ nhập pdb
và gọi pdb.set_trace()
. Tuy nhiên, bạn có thể kiểm soát hành vi gỡ lỗi thông qua sys.breakpointhook()
và sử dụng biến môi trườngPYTHONBREAKPOINT
.
Xem PEP 553 để biết thêm thông tin.
breakpoint
tôi rất phấn khích. Nhưng sau đó tôi đã học được rằng về cơ bản nó chỉ là một lối tắt import pdb; pdb.set_trace()
và điều đó làm tôi buồn. Các nhà phát triển Python: vui lòng tập trung vào việc cải thiện PDB với các tính năng GDB cơ bản như dòng ngữ cảnh, lịch sử lệnh liên tục và tự động hoàn thành tab :-)
ipdb thêm chức năng IPython vào pdb, cung cấp các cải tiến HUGE sau:
Giống như pdg, ipdb vẫn chưa hoàn hảo và hoàn toàn thô sơ nếu so với GDB, nhưng nó đã là một cải tiến rất lớn so với pdb.
Cách sử dụng tương tự pdb
, chỉ cần cài đặt nó với:
python3 -m pip install --user ipdb
và sau đó thêm vào dòng bạn muốn gỡ lỗi từ:
__import__('ipdb').set_trace(context=21)
Bạn có thể muốn thêm một lối tắt cho điều đó từ trình chỉnh sửa của mình, ví dụ như đối với người bắn tỉa Vim tôi có:
snippet ipd
__import__('ipdb').set_trace(context=21)
vì vậy tôi có thể gõ chỉ ipd<tab>
và nó mở rộng đến điểm dừng. Sau đó loại bỏ nó là dễ dàng dd
vì mọi thứ được chứa trong một dòng duy nhất.
context=21
tăng số lượng dòng ngữ cảnh như được giải thích tại: Làm cách nào để ipdb hiển thị nhiều dòng ngữ cảnh hơn trong khi gỡ lỗi?
Ngoài ra, bạn cũng có thể gỡ lỗi chương trình từ đầu bằng:
ipdb3 main.py
nhưng bạn thường không muốn làm điều đó bởi vì:
Hoặc cách khác, như trong pdb thô 3.2+, bạn có thể đặt một số điểm dừng từ dòng lệnh:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
mặc dù -c c
bị hỏng vì một số lý do: https://github.com/gotcha/ipdb/issues/156
python -m module
gỡ lỗi đã được hỏi tại: Làm thế nào để gỡ lỗi một mô-đun Python chạy với python -m từ dòng lệnh? và vì Python 3.7 có thể được thực hiện với:
python -m pdb -m my_module
Các tính năng thiếu nghiêm trọng của cả pdb và ipdb so với GDB:
Những phiền toái cụ thể của ipdb:
Đã thử nghiệm trong Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
Ngày nay có breakpoint()
phương pháp tồn tại , thay thếimport pdb; pdb.set_trace()
.
Nó cũng có một số tính năng mới , chẳng hạn như các biến môi trường có thể.
Nếu bạn muốn có một IDE với trình gỡ lỗi tích hợp, hãy thử PyScripter .
https://wiki.python.org/moin/PythonDebuggingTools
pudb là một thay thế thả vào tốt cho pdb
Python Tutor là một trình gỡ lỗi một bước trực tuyến dành cho người mới. Bạn có thể đặt mã trên trang chỉnh sửa sau đó nhấp vào "Trực quan hóa thực thi" để bắt đầu chạy.
Trong số những thứ khác, nó hỗ trợ:
Tuy nhiên, nó cũng không hỗ trợ nhiều thứ , ví dụ:
io.StringIO
và io.BytesIO
thay vào đó: demoCó thể lập trình bước và truy tìm thông qua mã python (và thật dễ dàng!). Nhìn vào tài liệu sys.settrace () để biết thêm chi tiết. Ngoài ra đây là một hướng dẫn để giúp bạn bắt đầu.
Visual Studio với PTVS có thể là một lựa chọn cho bạn: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm là một IDE cho Python bao gồm trình gỡ lỗi. Xem video YouTube này để biết giới thiệu về cách sử dụng trình gỡ lỗi của PyCharm để thực hiện mã.
Hướng dẫn PyCharm - Gỡ lỗi mã python bằng PyCharm
Lưu ý: Đây không phải là một sự chứng thực hoặc đánh giá. PyCharm là một sản phẩm thương mại mà người ta cần phải trả tiền, nhưng công ty cung cấp giấy phép miễn phí cho sinh viên và giáo viên, cũng như một phiên bản Cộng đồng "nhẹ" miễn phí và là nguồn mở.