To tylko wygodne pytanie. Byłem trochę zepsuty debugerami w IDE, takie jak Visual Studio i XCode. Uważam, że to trochę niezręczne, aby wpisać, import pdb; pdb.set_trace()
aby ustawić punkt przerwania (wolałbym nie importować pdb na początku pliku, ponieważ mógłbym zapomnieć i zostawić go).
Czy istnieje prostszy sposób ustawiania punktu przerwania w kodzie Pythona, tak prosty i dyskretny, jak to, co widzisz w IDE?
python -m pdb <your_script>.py
następnie,b <line_number>
aby ustawić punkt przerwania na wybranym numerze linii (bez nawiasów funkcji). Naciśnij,c
aby przejść do punktu przerwania. Możesz zobaczyć wszystkie swoje punkty przerwania zab
pomocą samego polecenia. Wpisz,help
aby zobaczyć inne polecenia pdb dostępne podczas debugowania.breakpoint()
funkcji wbudowanej . python.org/dev/peps/pep-0553Odpowiedzi:
Możesz uruchomić swój program
pdb
z wiersza poleceń, uruchamiającZepsuje się w pierwszym wierszu, a następnie będziesz mógł dodać punkt przerwania w dowolnym miejscu w kodzie za pomocą
break
polecenia, jego składnia to:Jest na tyle elastyczny, że daje możliwość dodania punktu przerwania w dowolnym miejscu.
źródło
pdb.set_trace()
wejdę do debugera, użyjl
polecenia (listy) i zobaczę, że chcę ustawić punkt przerwania w linii 27, wtedy wpisałbym:b 27
a debugger ustawiłby punkt przerwania w linii 27 (znalazłem dokumentacja jest trochę trudna do zrozumienia, dlatego chciałem dodać ten punkt wyjaśnienia).x
i chcesz zatrzymać się, gdyf
wywoływana jest jego metoda , możesz powiedziećbreak x.f
, a następniec(ontinue)
. Działa to nawet wtedy, gdy obiekt znajduje się w niedostępnym pliku lub został utworzony dynamicznie, np. Przez rozpakowanie.b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
Możesz użyć:
źródło
set_trace
tylko wtedy, gdy używam bp ()?W vimie mam ustawione makro (w moim pliku .vimrc):
więc mogę po prostu nacisnąć \ b (gdy nie jest w trybie wstawiania) i dodaje punkt przerwania po bieżącej linii lub \ B (zwróć uwagę na wielką literę) i umieszcza jeden przed bieżącą linią.
który wydaje się działać dobrze. Większość innych „prostych” edytorów programistów (emacs, sublimetext, itp.) Powinno mieć podobne łatwe sposoby na zrobienie tego.
Edycja: faktycznie mam:
który włącza go tylko dla plików źródłowych Pythona. Możesz bardzo łatwo dodać podobne wiersze dla javascript lub innych używanych języków.
Aktualizacja 2019 (Python 3.7+)
Python 3.7+ ma teraz wbudowane,
breakpoint()
które może zastąpić poprzednieimport pdb; pdb.set_trace()
w vimie. Nadal działa tak samo.źródło
set autoindent
w swoim pliku .vimrc .set autoindent
(i kilkoma innymi opcjami) w standardzie. Jedną z pierwszych rzeczy, które robię z nowym systemem, jest użycie lepszego vimrc ..."dyy
a kiedy potrzebujesz, po prostu zrób"dp
lub"dP
. Naucz się rejestrów VIM ! Są bardzo przydatne i zawsze są obsługiwane!qd
, a później,"dp
aby wkleić. Na koniec przypisz swoje instrukcje do rejestru, który jest zawsze wypełniany przy ładowaniu vima. Przykład:let @d = 'oimport pdb; pdb.set_trace()k0:w'
Teraz po prostu użyj,@d
kiedy chcesz wkleić linię do pliku. Powyższe również zapisuje plik. Ale będziesz musiał nagrać swój własny (zamiast kopiować / wklejać powyżej), ponieważ wymagane są specjalne znaki (dla ucieczki itp.).Jeśli nie chcesz ręcznie ustawiać punktów przerwania za każdym razem, gdy uruchamiasz program (w Pythonie 3.2+), np. Powiedz, że chcesz bezpośrednio utworzyć punkt przerwania w linii 3 i tam zatrzymać wykonywanie:
python -m pdb -c "b 3" -c c your_script.py
Poniższe informacje mogą pomóc:
źródło
Jeszcze tego nie próbowałem, ale właśnie zaimplementowali nowy wbudowany punkt przerwania () w Pythonie 3.7, co oznacza, że możesz teraz wstawić punkt przerwania za pomocą jednej instrukcji:
źródło
Oto jak użyłbyś pdb w linii poleceń bez implementowania czegokolwiek w kodzie źródłowym (dokumentacja i inne zasoby online nie radzą sobie dobrze, wyjaśniając to programiście, który w przeszłości używał tylko wizualnych debuggerów):
Uruchom pdb, wpisując w zachęcie powłoki:
To polecenie inicjuje pdb, a debugger pdb przerwie pierwszy wiersz twojego python_script i zaczeka na dane wejściowe od ciebie:
To jest interfejs do komunikacji z debugerem. Teraz możesz określić swoje polecenia tutaj. W przeciwieństwie do używania przycisków lub skrótów klawiaturowych w wizualnych debugerach, tutaj użyjesz poleceń, aby uzyskać te same wyniki.
Możesz przejść do następnej linii w kodzie poleceniem „n” (dalej):
Wykonanie next wyświetli numer linii i określony kod w źródle:
Możesz ustawić punkt przerwania, określając numer wiersza w kodzie źródłowym.
W tym przypadku debugger jest ustawiony na przerwanie w linii 50. Jeśli nie ma innych punktów przerwania, punkt przerwania w linii 50 będzie pierwszym i można się do niego odwołać za pomocą identyfikatora punktu przerwania, który w tym przypadku wynosi 1. Jeśli dodasz więcej punktów przerwania, otrzymają identyfikatory sekwencyjnie (tj. 2, 3 itd.)
Po ustawieniu punktu przerwania będziesz kontynuować wykonywanie programu, dopóki pdb nie osiągnie punktu przerwania w następujący sposób:
Gdy dojdziesz do punktu przerwania, możesz przejść do następnej linii za pomocą polecenia n, jak opisano wcześniej. Jeśli chcesz sprawdzić wartości zmiennych, wykonaj polecenie parametru w następujący sposób:
Jeśli nie potrzebujesz już punktu przerwania, możesz go wyczyścić, przekazując identyfikator punktu przerwania za pomocą polecenia clear:
Wreszcie, kiedy skończysz z debugerem, możesz zakończyć wykonywanie, tak jak zamknąłbyś interpreter wiersza poleceń Pythona.
Mam nadzieję, że pomoże to każdemu rozpocząć pracę z PDB. Oto lista poleceń, których możesz użyć z debugerem: pdb, więc pytanie i odpowiedzi
źródło
Python
3.7
ma nowy wbudowany sposób ustawiania punktów przerwania. PowołanieWięcej tutaj https://stackoverflow.com/a/53263117/6488361
źródło
Możesz użyć IDE, które obsługuje debugowanie Pythona lub możesz sprawdzić doskonałe narzędzie Winpdb. Który działa na każdej platformie i zapewnia graficzne możliwości debugowania skryptu w Pythonie.
http://winpdb.org/
źródło
Możesz użyć:
Wszystkie powyższe obsługują debugowanie Pythona z wnętrza IDE.
źródło
W Atom, jeśli są zainstalowane wtyczki Pythona, możesz po prostu wpisać „
pdb
” i nacisnąć Enter, a fragment kodu napisze import i śledzenie wstecz.Przyzwyczaiłem się do tego teraz, że czasami po prostu go wpisuję, nawet jeśli edytuję go w vimie i czekam, aż pojawi się lista rozwijana.
źródło
Niedocenianą metodą jest bezpośrednie ustawienie punktu przerwania w pdb:
ustawi punkt przerwania na
site-packages\torch\__init__.py:10
Następnie
pdb> c
zatrzyma się na tym punkcie przerwania.Poniższe są również ważne:
Szczegółowe informacje można znaleźć w dokumencie .
źródło
Możesz użyć Vima z wtyczką Python-Mode lub Emacsa z wtyczką Elpy .
Te wtyczki zapewniają punkty przerwania z łatwymi naciśnięciami klawiszy (
\ b
w Vimie iC-c C-u b
Emacs) oraz wiele innych funkcji z ciężkich IDE (składanie kodu, refaktoryzacja, linting itp.) - wszystko w lekkim edytorze tekstu opartym na terminalu.źródło
Najprostszym sposobem uruchomienia debugera w skrypcie jest po prostu
Uruchomienie pdb w linii poleceń Linuksa daje
źródło
pdb
? Albo skąd?