Як вийти з pdb та дозволити програму продовжуватись?


111

Я використовую модуль pdb для налагодження програми. Я хотів би зрозуміти, як я можу вийти з програми pdb і дозволити програмі продовжувати роботу до завершення. Програма обчислювально дорога для запуску, тому я не хочу виходити без спроби завершення сценарію. continueне здається, працює. Як я можу вийти з pdb і продовжувати програму?


2
continueвиходить з циклу, returnвиходить із методів / функцій
Stephan

7
@Stephan: Він говорить про continueкоманду pdb . Не твердження Python.
voithos

1
@turtle: continueмає "Продовжувати виконання, зупинятись лише тоді, коли виникає точка перелому ", згідно з документами. Чи є у вас набір точок перерви, який отримує удар?
voithos

1
ах. Добре, я бачу. так, у мене є точка розриву, встановлена ​​всередині циклу. все одно щоб обійти це? цикл викликається тисячі разів, тому я не можу продовжувати натискання вручну продовжувати.
черепаха

1
@turtle: У вас встановлено точку перерви зсередини Pdb або у вас є pdb.set_trace()вихідний код?
voithos

Відповіді:


190

continueслід "Продовжити виконання, зупинятись лише тоді, коли зустрінеться точка розриву", тож десь встановлено точку розриву. Щоб видалити точку зламу (якщо ви вставили її вручну):

(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

Або, якщо ви використовуєте pdb.set_trace(), ви можете спробувати це (хоча якщо ви використовуєте pdb більш химерними способами, це може зламати речі ...)

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

10
Вищезгадане не виходить з pdb.
Стів Барнс

7
О 15-му слові питання!
Стів Барнс

13
@SteveBarnes: Я думаю, ти сприймаєш це занадто буквально. ОП просто б'є точку перерви знову і знову. Все, що їм потрібно, - це продовжити свій тривалий процес, не потрапляючи на точки прориву. Незалежно від того, працює чи ні Pdb, не має значення.
voithos

35
Приємна порада щодо налаштування set_trace = lambda: None:)
randlet

2
У крайніх випадках нічого не б'є set_trace = lambda: None. Python org повинен додати команду, яка дозволяє лише вийти з pdb.
ErezO

26

Простий Ctrl- Dвирветься з pdb. Якщо ви хочете продовжувати, а не ламати, просто натисніть, cа не всю continueкоманду


6
А як бути, коли ви знаходитесь у функції, усередині циклу? Здається, я просто переходжу до наступного циклу, і я фактично не можу закрити pdb або навіть закрити python, не закриваючи весь термінал?
Марс

@LimokPalantaemon Дивно, ви спробували набрати текстexit
Minh Triet

Це не працює, якщо ви встановили слід або якщо у вас є точки перерви, якщо ви не продовжуєте натискати c.
Олексій

невтішно, але це врятувало мене не
затримуватися

7

Відповідь від @voithos правильно, так що я просто додати одну альтернативу в тому випадку , якщо ви використовуєте set_trace. Так, pdb.set_trace = lambda: Noneзлом працює нормально, але ні, якщо у вас встановлені інші точки пробою і ви хочете його знову вподобати. Для мене це вказує на той факт, що, на жаль, pdbне вистачає безлічі функціоналів (навіть базових речей, таких як списки відображення), і це вже інший випадок.

Хороша новина полягає в тому, що pdb++це чудова заміна для випаду pdb, і одна з рішень, яку вона вирішує, - це саме проблема відключення set_trace. Тож ви можете просто зробити:

pip install pdbpp

а потім у (Pdb++)запиті введіть:

pdb.disable()

Якщо ви хочете переглядати їх згодом, це не дивно:

pdb.enable()

Легко! Крім того, ви отримаєте багато інших корисних смаколиків.


4

Якщо ви дійсно бажаєте вийти з налагоджувача, вам потрібно запустити щось на зразок WinPdb, що дозволяє відірватися від процесу, а потім вийти з налагоджувача, (NB Це мультиплатформна).

Якщо ви хочете продовжувати налагодження, але більше не зупиняєтесь на заданій точці розриву, вам потрібно:

  1. Запишіть номер точки перерви (або номер файлу та рядка),
  2. Будь-ласка, cl bp_number або clear file:line назавжди вийміть точку зламу або disable pb_number вимкніть її, але зможете повернути її назад.
  3. Потім continueі ваша програма запускається до тих пір, коли буде досягнуто наступної різної точки розриву.

Детальніше про вищезазначене див. У посібнику .


0

знайти новий спосіб вийти з pdb, не встановлюючи нічого: - коли програма починає працювати, натисніть ctrl + c, потім переключіть вікно на інше (будь-яке вікно), тоді оригінальна оболонка з запущеним pdb повинна показувати щось на кшталт: (pdb) ..... - поверніться до pdb, потім натисніть клавішу Enter, тепер все готово, командна оболонка pdb знову з’явиться

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.