Как пропустить понимание списка в отладчике Python (pdb)?

В pdb инструкция next не проходит через списки, вместо этого она проходит через каждую итерацию. Есть ли способ обойти их, чтобы отладка продолжалась на следующей строке после понимания списка?

Мне пришлось прибегнуть к перечислению кода, установке точки останова на следующей строке, а затем продолжению выполнения до следующей точки останова. Это раздражает, и я подумал, что должен быть лучший способ.


person davidavr    schedule 10.06.2011    source источник


Ответы (2)


Вы можете использовать команду until. Вывод help until в pdb:

unt(il)
Продолжать выполнение до тех пор, пока не будет достигнута строка с номером больше текущего или пока не будет возвращен текущий кадр

person Sven Marnach    schedule 10.06.2011

Разрабатывая ответ Свена, я недавно должен был описать until и next коллеге. Это относится не только к пониманию списка, которое stuck с next, но и к циклам в целом.:

Команда until аналогична next, за исключением того, что она явно продолжается до тех пор, пока выполнение не достигнет строки в той же функции с номером строки, превышающим текущее значение.

Это означает, что вы можете перешагивать циклы с помощью until

Просто чтобы покрыть step и next для полноты картины:

Команда step используется для выполнения текущей строки и последующей остановки в следующей точке выполнения.

Это означает, что он будет идти инструкция за инструкцией. Обратите внимание, что объединенные инструкции с ; будут обрабатываться как одна инструкция.

var A=0; var B=0 #Note: that will count as one instruction

Команда next аналогична шагу, но не входит в функции, вызываемые из выполняемого оператора. По сути, он проходит весь путь от вызова функции до следующего оператора в текущей функции за одну операцию.

next помогает перепрыгнуть через несколько инструкций, в функции с несколькими определениями переменных он перепрыгнет через все из них.

Вот пример, демонстрирующий сценарий:

Пример: pdb_until.py

aVar = 3
x = [i for i in range(0,30)]
bVar = 5

Запуск с помощью Pdb:

python -m pdb pdb_until.py

Начинает наш интерактивный сеанс:

> pdb_until.py(1)<module>()
-> aVar = 3
(Pdb) step                #our Input, we step
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, next
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, we are now stuck on line 2
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) until               #our Input, until steps over (runs list comp)

Источник: Стандартная библиотека Python на примере, Дуг Хеллманн.

person user1767754    schedule 08.12.2017