Как пропустить понимание списка в отладчике Python (pdb)? - PullRequest
49 голосов
/ 10 июня 2011

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

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

Ответы [ 2 ]

63 голосов
/ 10 июня 2011

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

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

2 голосов
/ 08 декабря 2017

Обрабатывая ответ Свена, поскольку я недавно должен был описать until и next коллеге.Он не является специфичным для понимания списка, которое stuck со следующим, но для циклов в целом.:

Команда 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 на примере Дуга Хеллмана

...