Odpowiedzi:
Tak! Istnieje tylko debugger Pythona, który pdb
jest do tego przeznaczony!
Możesz uruchomić program w języku Python za pdb
pomocą pdb myscript.py
lub python -m pdb myscript.py
.
Można wtedy wydać kilka poleceń, które są udokumentowane na pdb
stronie.
Niektóre przydatne do zapamiętania to:
b
: ustaw punkt przerwaniac
: kontynuuj debugowanie, aż osiągniesz punkt przerwanias
: przejdź przez kodn
: aby przejść do następnego wiersza kodul
: wyświetla kod źródłowy bieżącego pliku (domyślnie: 11 wierszy, w tym wykonywany wiersz)u
: nawigacja w górę ramki stosud
: nawiguj w dół ramki stosup
: aby wydrukować wartość wyrażenia w bieżącym kontekścieJeśli nie chcesz używać debuggera z linii poleceń, niektóre IDE, takie jak Pydev , Wing IDE lub PyCharm, mają debugger z GUI. Wing i PyCharm są produktami komercyjnymi, ale Wing ma bezpłatną edycję „Personal”, a PyCharm ma bezpłatną edycję dla społeczności.
pudb
świetnie się do tego nadaje . Równieżpydev
pdb
nie jest narzędziem wiersza poleceń. Aby go użyć, użyj python -m pdb your_script.py
.
pdb
polecenie jest częścią python
pakietu. W każdym razie python -m <module>
staje się standardem także dla innych rzeczy pip
, więc prawdopodobnie najlepiej jest użyć tego domyślnie.
Pierwszym krokiem jest skłonienie interpretera języka Python do przejścia w tryb debugowania.
A. Z wiersza poleceń
Najprostsza droga, uruchamiana z wiersza poleceń interpretera python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. W ramach tłumacza
Opracowując wczesne wersje modułów i eksperymentując z nimi bardziej iteracyjnie.
$ 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. Z poziomu programu
W przypadku dużego projektu i długotrwałego modułu można rozpocząć debugowanie od wewnątrz programu za pomocą importu pdb i set_trace () w następujący sposób:
#!/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()
Debugowanie krok po kroku, aby uzyskać bardziej wewnętrzny
Wykonaj następną instrukcję… za pomocą „n” (next)
Powtarzanie ostatniego polecenia debugowania… za pomocą ENTER
Porzucenie wszystkiego… za pomocą „q” (wyjście)
Drukowanie wartości zmiennych… za pomocą „p” (drukuj)
a) pa
Wyłączanie monitu (Pdb)… za pomocą „c” (kontynuuj)
Sprawdzanie, gdzie jesteś… za pomocą „l” (lista)
Wchodzenie do podprogramów… za pomocą „s” (wejście w)
Kontynuacja… ale tylko do końca bieżącego podprogramu… z „r” (powrót)
Przypisz nową wartość
a) ! b = „B”
Ustaw punkt przerwania
a) złamać numer pościeli
b) przerwij nazwę funkcji
c) zepsuj nazwę pliku: numer bielizny
Tymczasowy punkt przerwania
a) numer pościeli
Warunkowy punkt przerwania
a) złamać numer pościeli, stan
Uwaga: ** Wszystkie te polecenia należy wykonać z ** pdb
Aby uzyskać dogłębną wiedzę, patrz: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
W pythonie znajduje się moduł o nazwie „pdb”. Na górze skryptu pythonowego robisz
import pdb
pdb.set_trace()
i wejdziesz w tryb debugowania. Możesz użyć „s”, aby przejść, „n”, aby przejść do następnego wiersza, podobnie jak w przypadku debugera „gdb”.
Począwszy od Python 3.7, możesz użyć breakpoint()
wbudowanej funkcji, aby wejść do debuggera:
foo()
breakpoint() # drop into the debugger at this point
bar()
Domyślnie breakpoint()
importuje pdb
i dzwoni pdb.set_trace()
. Można jednak kontrolować zachowanie podczas debugowania za sys.breakpointhook()
pomocą zmiennej środowiskowej i jej używania PYTHONBREAKPOINT
.
Aby uzyskać więcej informacji, zobacz PEP 553 .
breakpoint
byłem podekscytowany. Ale potem dowiedziałem się, że jest to po prostu skrót do import pdb; pdb.set_trace()
tego i to mnie zasmuciło. Python DEVS: proszę skupić się na poprawie WPB z podstawowych usług, takich jak GDB linii kontekstowych, uporczywy historii poleceń i zakładki autouzupełnianie :-)
ipdb dodaje funkcjonalność IPython do pdb, oferując następujące OGROMNE ulepszenia:
Podobnie jak pdg, ipdb jest wciąż daleki od ideału i całkowicie szczątkowy w porównaniu z GDB, ale jest już ogromną poprawą w porównaniu z pdb.
Użycie jest analogiczne pdb
, wystarczy zainstalować z:
python3 -m pip install --user ipdb
a następnie dodaj do linii, z której chcesz krok debugować:
__import__('ipdb').set_trace(context=21)
Prawdopodobnie zechcesz dodać do tego skrót ze swojego edytora, np. Do snipmate Vima Mam:
snippet ipd
__import__('ipdb').set_trace(context=21)
więc mogę wpisać just ipd<tab>
i rozwija się do punktu przerwania. Dzięki temu usunięcie jest łatwe, dd
ponieważ wszystko jest zawarte w jednym wierszu.
context=21
zwiększa liczbę linii kontekstu, jak wyjaśniono na stronie: Jak sprawić, aby ipdb wyświetlał więcej linii kontekstu podczas debugowania?
Alternatywnie możesz również debugować programy od samego początku za pomocą:
ipdb3 main.py
ale generalnie nie chcesz tego robić, ponieważ:
Lub alternatywnie, jak w surowym pdb 3.2+, możesz ustawić niektóre punkty przerwania z wiersza poleceń:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
chociaż -c c
z jakiegoś powodu jest zepsuty: https://github.com/gotcha/ipdb/issues/156
python -m module
debugowanie zostało zadane na stronie: Jak debugować moduł Pythona uruchamiany z python -m z wiersza poleceń? a ponieważ Python 3.7 można wykonać za pomocą:
python -m pdb -m my_module
Poważne brakujące funkcje zarówno pdb, jak i ipdb w porównaniu z GDB:
Irytacje specyficzne dla ipdb:
Testowane w Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
Obecnie istnieje breakpoint()
metoda, która zastępuje import pdb; pdb.set_trace()
.
Ma także kilka nowych funkcji , takich jak możliwe zmienne środowiskowe.
Jeśli chcesz IDE ze zintegrowanym debuggerem, wypróbuj PyScripter .
https://wiki.python.org/moin/PythonDebuggingTools
pudb jest dobrym zamiennikiem pdb
Python Tutor to internetowy debugger przeznaczony dla początkujących. Możesz wpisać kod na stronie edycji, a następnie kliknąć „Wizualizacja wykonania”, aby uruchomić.
Obsługuje między innymi:
Jednak nie obsługuje również wielu rzeczy , na przykład:
io.StringIO
i io.BytesIO
zamiast tego: demoMożliwe jest także programowe przechodzenie i śledzenie kodu Pythona (i jest to łatwe!). Spójrz na sys.settrace () dokumentacji dla więcej szczegółów. Również tutaj jest samouczek na dobry początek.
Visual Studio z PTVS może być opcją dla Ciebie: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm to IDE dla Pythona, które zawiera debugger. Obejrzyj ten film na YouTube, aby zapoznać się z wprowadzeniem debugera PyCharm do przejścia przez kod.
Samouczek PyCharm - debugowanie kodu python za pomocą PyCharm
Uwaga: nie jest to rekomendacja ani przegląd. PyCharm to produkt komercyjny, za który trzeba zapłacić, ale firma zapewnia bezpłatną licencję dla uczniów i nauczycieli, a także „lekką” wersję społecznościową, która jest bezpłatna i open source.