Лекция: Основы pdb

На прошлой неделе на курсе Python для сетевых инженеров была лекция по основам pdb. Делюсь записью лекции и шпаргалкой по командам, возможно, кому-то ещё это пригодится.

Лекция

Полезные ресурсы

Как запустить pdb

python -m pdb script.py

Для выхода из pdb используется команда q.

В любой момент можно перезапустить скрипт, без потери breakpoint, с помощью команды run.

Базовые команды передвижения по программе

  • n (next) - выполнить все до следующей строки. Эта команда не заходит в функции, которые вызываются в строке
  • s (step) - выполнить текущую строку, остановиться как можно раньше. Эта команда заходит в функции, которые вызываются в строке
  • c (continue) - выполнить все до breakpoint. Также полезна, когда скрипт отрабатывает с исключением, позволяет дойти до строки, где возникло исключение

Контекст в скрипте, переменные

  • l (list) - показывает следующую строку, которая будет выполняться и 5 строк до и после нее. При добавлении диапазона показывает указанные строки, например, list 1, 20 покажет код с 1 по 20 строку
  • ll (longlist) - показывает весь метод или функцию в котором мы находимся
  • a (args) - показывает аргументы функции (или метода) и их значения. Работает только внутри функции
  • p - показывает значение переменной, работает как print. Синтаксис p vara, где vara имя переменной
  • pp - показывает значение переменной, работает как pprint. Синтаксис pp vara, где vara имя переменной

Выполнение Python команд в pdb

Любую команду можно выполнить указав ! перед ней:

!vara = 55
!result.append(vara)

Таким образом можно пробовать выполнить какие-то действия в текущем контексте программы, изменить значения переменных.

Также можно перейти в интерпретатор python из текущего контекста. Для этого используется команда interact:

(Pdb) interact
*interactive*
>>> print(cfg)
<_io.TextIOWrapper name='sh_cdp_n_sw1.txt' mode='r' encoding='UTF-8'>
>>> cfg.closed
False
>>>
>>> data = ['1','2','3']
>>> print(','.join(data))
1,2,3
>>>
now exiting InteractiveConsole...
(Pdb)

Для выхода из интерпретатор используется команда Ctrl-d.

Дополнительные команды по передвижению

  • until - выполнить все до указанной строки. Синтаксис until 15, где 15 номер строки
  • return - выполняется внутри функции и выполняет все до return
  • u (up) - передвинутся на один уровень выше в стеке вызовов. Например, если мы по цепоцке переходили в один вызов функции, затем в друго, чтобы вернуться назад надо использовать up
  • d (down) - передвинутся на один уровень ниже в стеке вызовов

Breakpoints

  • b (break) - команда для установки breakpoint

Если команда указывается с аргументом, например, break 12 или break check_ip, устанавливается breakpoint. Без аргументов, команда показывает все установленные breakpoint.

Удаление breakpoint под номером 1:

clear 1

Базовые варианты установки breakpoint

Установить breakpoint в строке 12:

break 12

Установить breakpoint в первой строке функции check_ip:

break check_ip

Breakpoint с условием

Сделать breakpoint в строке 12, если значение переменной num будет больше 10:

break 12, num > 10

Привязка команд к breakpoint

Создаем breakpoint (предполагаем, что он первый, поэтому его номер будет 1):

break 12

Добавляем команды, которые будут выполняться каждый раз, когда попадаем на breakpoint (var1, var2, result_dict должны быть заменены на ваши переменные)

commands 1
 pp var1
 pp var2
 pp result_dict
end