Основы pdb#

Отладчик (debugger) это отдельный модуль, софт или часть редактора/IDE, которая позволяет делать отладку кода.

Примеры отладчиков и редакторов с отладчиками:

  • pdb - модуль стандартной библиотеки Python (есть много разновидностей pdbr, ipdb, pdbpp)

  • отладчики в редакторах для начинающих: Mu, Thonny

  • PyCharm

  • VS Code

Как запустить 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 можно clear без аргументов.

Базовые варианты установки 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

ipdb#

Модуль ipdb это одна из разновидностей pdb, которая добавляет подсветку синтаксиса, вызов ipython вместо встроенного интерпретатора, автопродолжение команд.

Установка ipdb:

pip install ipdb

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

python -m ipdb script.py

В остальном, команды те же, что в и pdb, только по команде interact откроется ipython, а не встроенный интепретатор python.