Pytanie Prostszy sposób na umieszczanie punktów przerwania PDB w kodzie Pythona?


Tylko pytanie o wygodę. Byłem trochę rozpieszczony przez debuggery w IDE, takich jak Visual Studio i XCode. Uważam, że jest to trochę niezdarne, aby pisać import pdb; pdb.set_trace() ustawić punkt przerwania (wolałbym nie importować pdb na górze pliku, ponieważ mógłbym go 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?


76
2017-08-08 10:24


pochodzenie




Odpowiedzi:


Możesz uruchomić swój program pdb z wiersza poleceń, uruchamiając

python -m pdb your_script.py

Przerwa w pierwszej linii, wtedy będziesz mógł dodać punkt przerwania, gdzie chcesz w kodzie za pomocą break polecenie, jego składnia to:

b (reak) [[filename:] lineno | funkcja [, warunek]]

Jest na tyle elastyczny, że daje możliwość dodania punktu przerwania w dowolnym miejscu.


93
2017-08-08 10:31



wyjaśnić tę kwestię, jeśli ja pdb.set_trace() i przejdź do debuggera, użyj l command (list) i zobacz, że chcę ustawić punkt przerwania w linii 27, wtedy wpisałbym: b 27 a debugger ustawi punkt przerwania w linii 27 (uważam, że dokumentacja jest trochę trudna do zrozumienia, więc chciałem dodać tę kwestię wyjaśnienia). - benjaminmgross
Ponadto, jeśli masz obiekt xi chcesz przestać, gdy jego metoda f nazywa się, możesz powiedzieć break x.f, i wtedy c(ontinue). Działa to nawet wtedy, gdy obiekt znajduje się w niedostępnym pliku lub został utworzony dynamicznie, np. przez rozpryskanie. - osa
Podczas debugowania po ścieżce stosu można skopiować pełną ścieżkę do modułu i dołączyć numer linii jak b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596 - valid


Możesz użyć:

from pdb import set_trace as bp

code
code
bp()
code
code

38
2018-02-24 13:56





W vimie mam do tego skonfigurowane makro (w moim pliku .vimrc):

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

więc mogę po prostu nacisnąć \ b (gdy nie jest w trybie wstawiania) i dodaje punkt przerwania po bieżącej linii lub \ B (zanotuj kapitał) i umieszcza go przed bieżącą linią.

co wydaje się działać poprawnie. Większość innych "prostych" edytorów programistów (emacs, sublimetext, itp.) Powinna mieć podobne proste sposoby na zrobienie tego.

Edytować: Właściwie to mam:

au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

który włącza go tylko dla plików źródłowych Pythona. Możesz bardzo łatwo dodać podobne linie do javascript lub innych używanych przez ciebie języków.


29
2017-10-28 11:51



Ładne rozwiązanie, a dodana linia będzie miała poprawne wcięcie, jeśli masz set autoindentw Twoim .vimrc plik. - Jealie
Tak, nie rozumiem, dlaczego większość dystrybucji nie jest dostarczana set autoindent (i kilka innych opcji) w standardzie. Jedną z pierwszych rzeczy, które robię w nowym systemie, jest wciągnięcie lepszego vimrc ... - Daniel
Po prostu użyj vima nazwanego rejestru! Zapisz wiersz, który chcesz buforować "d" (jak w reebug) przez naciśnięcie "dyy i kiedy tylko tego potrzebujesz, po prostu rób "dp lub "dP. Uczyć się rejestry vim! Są bardzo przydatne i zawsze są obsługiwane! - polvoazul
jak dodać: w po tym? - ji-ruh


Jeśli nie chcesz ręcznie ustawiać pułapek przy każdym uruchomieniu programu (w Pythonie 3.2+), np. powiedzmy, że chcesz bezpośrednio utworzyć punkt przerwania w linii 3 i zatrzymać tam wykonanie:

python -m pdb -c "b 3" -c c your_script.py

Pomocne mogą być następujące informacje:

Jeśli plik .pdbrc istnieje w katalogu domowym użytkownika lub w bieżącym katalogu, jest on odczytywany i uruchamiany tak, jakby został wpisany w wierszu polecenia debuggera. Jest to szczególnie przydatne w przypadku aliasów. Jeśli oba pliki istnieją, to w katalogu domowym jest czytany pierwszy i aliasy zdefiniowane tam mogą być przesłonięte przez plik lokalny.

Zmieniono w wersji 3.2: .pdbrc może teraz zawierać polecenia, które kontynuują debugowanie, takie jak kontynuacja lub następna. Wcześniej te polecenia nie działały.

Nowości w wersji 3.2: pdb.py akceptuje teraz opcję -c, która wykonuje polecenia, jak podano w pliku .pdbrc, patrz Polecenia debugowania.


16
2017-11-19 15:42





W ten sposób użyjesz pdb w wierszu poleceń bez implementowania czegokolwiek w kodzie źródłowym (dokumentacja i inne zasoby online nie sprawdzają się dobrze, tłumacząc to programistom, który w przeszłości używał tylko debuggerów wizualnych):

Uruchom pdb, wpisując następujące polecenie w zachęcie powłoki:

python -m pdb 'python_script'

Polecenie to inicjuje pdb, a debuger pdb łamie się w pierwszym wierszu twojego Pythona i czeka na odpowiedź:

(Pdb)

Jest to interfejs do komunikacji z debuggerem. Teraz możesz tutaj określić swoje polecenia. W przeciwieństwie do używania przycisków lub skrótów klawiszowych w debuggerach wizualnych, tutaj użyjesz poleceń, aby uzyskać takie same wyniki.

Możesz przejść do następnej linii kodu za pomocą polecenia "n" (następna):

(Pdb) n

Wykonanie następnego spowoduje wyświetlenie numeru wiersza i określonego kodu w źródle:

> python_script(line number)method name
-> current line in the source code

Możesz ustawić punkt przerwania, określając numer wiersza w kodzie źródłowym.

(Pdb) b 50

Tutaj debugger jest ustawiony na przerwanie w linii 50. Jeśli nie ma żadnych innych punktów przerwania, punkt przerwania w linii 50 będzie pierwszym i może być odwołany przez identyfikator punktu przerwania, który w tym przypadku wynosi 1. Jeśli dodasz więcej punktów przerwania, otrzymają one sekwencyjnie identyfikatory (tj. 2, 3 itd.)

Po ustawieniu punktu przerwania będziesz kontynuował wykonywanie programu do momentu, aż pdb dotrze do punktu przerwania w następujący sposób:

(Pdb) c

Gdy dojdziesz do punktu przerwania, możesz przejść do następnego wiersza, używając polecenia n, jak opisano wcześniej. Aby sprawdzić wartości zmiennych, należy wykonać polecenie parametru w następujący sposób:

(Pdb) p variable_name

Jeśli nie potrzebujesz już punktu przerwania, możesz go wyczyścić, przekazując identyfikator punktu przerwania za pomocą polecenia clear:

(Pdb) clear 1

Na koniec, kiedy skończysz z debuggerem, możesz zakończyć wykonywanie, tak jak wyjdziesz z interpretera wiersza poleceń Pythona.

(Pdb) exit()

Mam nadzieję, że to pomoże każdemu zacząć z pdb. Oto lista poleceń, których możesz używać z debugerem: pdb więc pytania i odpowiedzi


8
2017-08-16 20:06





Możesz użyć IDE, który obsługuje debugowanie pythona, lub możesz sprawdzić doskonałe narzędzie Winpdb. Który działa na dowolnej platformie i zapewnia graficzne narzędzia do debugowania skryptu Pythona.

http://winpdb.org/


4
2017-08-08 10:26





Jeszcze tego nie próbowałem, ale po prostu zaimplementowali nowy wbudowany o nazwie breakpoint () w Pythonie 3.7, co oznacza, że ​​możesz wstawić punkt przerwania z jedną instrukcją:

breakpoint()

3
2018-03-23 00:26





Możesz użyć:

  • skrzydło ide
  • eclipse z wtyczką pydev
  • pycharmy

Wszystkie powyższe debugowanie python wsparcie z wewnątrz IDE.


2
2017-08-08 10:30





W Atomie, jeśli zainstalowane są wtyczki Python, możesz po prostu wpisać "pdb"i naciśnij enter, a fragment kodu zostanie zaimportowany i odszukany.

Przyzwyczaiłem się do tego, że czasami po prostu wpisuję to, nawet jeśli edytuję je w vimie i czekam, aż pojawi się rozwijane menu.


0
2018-05-07 22:56





Najprostszym sposobem uruchomienia debuggera na swoim skrypcie jest właśnie

pdb your_script.py

Uruchamianie pdb w wierszu poleceń systemu Linux

usage: pdb.py scriptfile [arg] ...

-1
2018-02-07 06:43



Jak zainstalować pdb? Lub skąd? - kenorb