Основы pdb#
Отладчик (debugger) это отдельный модуль, софт или часть редактора/IDE, которая позволяет делать отладку кода.
Примеры отладчиков и редакторов с отладчиками:
pdb - модуль стандартной библиотеки Python (есть много разновидностей pdbr, ipdb, pdbpp)
Как запустить 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.