Jak wyjść z pdb i pozwolić programowi kontynuować?


111

Używam modułu pdb do debugowania programu. Chciałbym zrozumieć, jak mogę wyjść z pdb i pozwolić programowi na kontynuowanie aż do zakończenia. Uruchomienie programu jest kosztowne obliczeniowo, więc nie chcę wychodzić bez próby zakończenia skryptu. continuenie wydaje się działać. Jak mogę wyjść z pdb i kontynuować pracę z moim programem?


2
continueWychodzi z pętli, returnwychodzi z metod / funkcji
— Stephan

7
@Stephan: Mówi o continuepoleceniu pdb. Nie instrukcja Pythona.
— voithos

1
@turtle: continuepowinno "Kontynuować wykonywanie, zatrzymywać tylko po napotkaniu punktu przerwania", zgodnie z dokumentacją. Czy masz ustawiony punkt przerwania, który jest trafiony?
— voithos

1
ah. dobra, widzę. tak, mam punkt przerwania ustawiony w pętli. tak czy inaczej, żeby to obejść? pętla jest wywoływana tysiące razy, więc nie mogę kontynuować ręcznie.
— żółw

1
@turtle: Czy masz ustawiony punkt przerwania w Pdb, czy masz pdb.set_trace()w kodzie źródłowym?
— voithos

Odpowiedzi:


190

continuepowinno „Kontynuować wykonywanie, zatrzymywać się tylko wtedy, gdy zostanie napotkany punkt przerwania”, więc gdzieś jest ustawiony punkt przerwania. Aby usunąć punkt przerwania (jeśli wstawiłeś go ręcznie):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

Lub, jeśli używasz pdb.set_trace(), możesz spróbować tego (chociaż jeśli używasz pdb w bardziej wyszukany sposób, może to zepsuć sprawę ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

10
Powyższe nie powoduje wyjścia z pdb.
— Steve Barnes

7
O piętnastym słowie pytania!
— Steve Barnes

13
@SteveBarnes: Myślę, że bierzesz to zbyt dosłownie. OP tylko raz po raz uderza w punkt przerwania. Wszystko, czego potrzebują, to kontynuowanie długotrwałego procesu bez osiągania punktów przerwania. Nie ma znaczenia, czy Pdb faktycznie działa, czy nie.
— voithos

35
Niezła wskazówka dotycząca ustawienia set_trace = lambda: None:)
— randlet

2
W skrajnych przypadkach nic nie przebije set_trace = lambda: None. Python org powinien dodać polecenie, które po prostu pozwoli ci wyjść z pdb.
— ErezO

26

Prosty Ctrl- Dwyrwie się z pdb. Jeśli chcesz kontynuować, a nie przerywać, po prostu naciśnij, ca nie całe continuepolecenie


7
A co z sytuacją, gdy jesteś wewnątrz funkcji, wewnątrz pętli? Wydaje się, że po prostu przechodzi do następnej pętli, a nie mogę zamknąć pdb, a nawet pythona bez zamknięcia całego terminala?
— Marses,

@LimokPalantaemon Dziwne, czy próbowałeś pisaćexit
— Minh Triet

To nie działa, jeśli ustawisz ślad lub jeśli masz punkty przerwania, chyba że będziesz nadal naciskać c.
— Alex

żenujące, ale to uchroniło mnie przed utknięciem na zbyt długo -_-
— jmcg

7

Odpowiedź od @voithos jest poprawna, więc dodam tylko jedną alternatywę w przypadku, gdy używasz set_trace. Tak, pdb.set_trace = lambda: Nonehack działa poprawnie, ale nie, jeśli masz ustawione inne punkty przerwania i chcesz je później ponownie włączyć. Dla mnie wskazuje to na fakt, że niestety pdbbrakuje wielu funkcji (nawet podstawowych rzeczy, takich jak listy wyświetlania), a to jest inny przypadek.

Dobra wiadomość jest taka, że pdb++jest to świetny zamiennik pdb, a jedną z rzeczy, które rozwiązuje, jest właśnie problem wyłączania set_trace. Możesz więc po prostu zrobić:

pip install pdbpp

a następnie po (Pdb++)monicie wpisz:

pdb.disable()

Jeśli chcesz ponownie włączyć później, nic dziwnego, że działa to:

pdb.enable()

Łatwo! Oprócz tego otrzymasz wiele innych przydatnych gadżetów.


4

Jeśli naprawdę chcesz wyjść z debugera, musisz uruchomić coś takiego jak WinPdb, które pozwala odłączyć się od procesu, a następnie wyjść z debugera (NB jest to wieloplatformowe).

Jeśli chcesz kontynuować debugowanie, ale nie zatrzymywać się już w danym punkcie przerwania, musisz:

  1. Zanotuj numer punktu przerwania (lub plik i numer linii),
  2. Albo cl bp_number albo clear file:line , aby trwale usunąć punkt przerwania lub disable pb_number , aby włączyć go, ale być w stanie włączyć je z powrotem.
  3. Następnie continuei twój program działa do tego momentu trafia następny inny punkt przerwania.

Więcej szczegółów na temat powyższego znajduje się w instrukcji .


0

znajdź nowy sposób na wyjście z pdb bez instalowania czegokolwiek: - gdy program zacznie działać, naciśnij ctrl + c, a następnie przełącz okno na inne (dowolne okno), wtedy oryginalna powłoka z uruchomionym pdb powinna pokazać coś takiego: (pdb) ..... - przełącz się z powrotem na pdb, a następnie naciśnij Enter, teraz wszystko gotowe, powłoka poleceń pdb pojawia się ponownie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.