Ответ 1
Вы можете использовать команду until
. Вывод help until
в pdb
:
ЕНТ (П)
Продолжайте выполнение до тех пор, пока строка с номером больше текущего один достигнут или пока текущий кадр не вернет
В pdb
инструкция next
не выполняет переходы по спискам, а выполняет каждую итерацию. Есть ли способ перешагнуть через них, поэтому отладка будет продолжена на следующей строке после понимания списка?
Мне пришлось прибегнуть к перечислению кода, установлению точки останова на следующей строке, а затем продолжению выполнения следующей контрольной точки. Это раздражает, и я решил, что должен быть лучший способ.
Вы можете использовать команду until
. Вывод help until
в pdb
:
ЕНТ (П)
Продолжайте выполнение до тех пор, пока строка с номером больше текущего один достигнут или пока текущий кадр не вернет
Разрабатывая ответ Sven, как мне пришлось недавно описывать 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, например, Дуг Хеллманн