python pdb - цикл пропуску


88

Як я можу пропустити цикл за допомогою pdb.set_trace()?

Наприклад,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdbзапити перед циклом. Вводжу команду. Повертаються всі значення 1-5, а потім я б хотів, щоб перед виконанням було запропоновано pdbще раз print('Done!').

Відповіді:


137

Спробуйте untilтвердження.

Перейдіть до останнього рядка циклу (за допомогою nextабо n), а потім використовуйте untilабо unt. Це переведе вас до наступного рядка, відразу після циклу.

http://www.doughellmann.com/PyMOTW/pdb/ має гарне пояснення


Зі статті: перейдіть до останнього рядка циклу for за допомогою n, а потім введіть until. Це триватиме доти, доки не буде перевищено принаймні поточний рядок.
— sachinruk,

Працює і з розумінням списків. Вам не потрібно дбати про останній рядок.
— Шива,

Що ви зробите, якщо перехід до останнього рядка циклу буде громіздким? Невже немає еквівалента функції fR, debugяка "завершує виконання поточного циклу або функції" ( adv-r.hadley.nz/debugging.html )?
— Касвед,

Використання until(або його короткої форми unt) без аргументів завжди буде йти по рядку (якщо ви не натиснете оператор return), тому ви можете просто використовувати це купу разів замість n.
— Борис

Це не працює з breakpoint()набором у циклі в python 3. Банки VB Editorможуть приймати точки зупинки "на льоту", але це, швидше за все, не так pdb.
— Тимо

4

Ви повинні встановити точку зупинки після циклу ("break main.py:4", припускаючи, що наведені вище рядки знаходяться у файлі, який називається main.py), а потім продовжити ("c").


2

У посиланні, згаданому прийнятою відповіддю ( https://pymotw.com/3/pdb/ ), я знайшов цей розділ дещо кориснішим:

Щоб дозволити виконанню до певного рядка, передайте номер рядка команді till.

Ось приклад того, як це може працювати re: loops:

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення

Це позбавляє вас від двох речей: необхідності створювати додаткові точки зупинки та необхідності переходити до кінця циклу (особливо коли ви, можливо, вже повторили таке, що не змогли б без повторного запуску налагоджувача).

Ось документи на Python until. До речі, я використовую pdb++як випадаючий стандартний налагоджувач (отже, форматування), але untilпрацює однаково в обох.


0

Ви можете встановити іншу точку зупинки після циклу і перейти до неї (при налагодженні) за допомогою c:

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

-17

Якби я це правильно зрозумів.

Одним із можливих способів зробити це буде:

Як тільки ви отримаєте pdbпідказку. Просто вдаривn (далі) 10 разів, щоб вийти з циклу.

Однак я не знаю способу виходу з циклу pdb .

rОднак ви можете використати для виходу з функції.


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