Отладчик программ, написанных на Python.
Модуль pdb
определяет интерактивный отладчик исходного кода для программ Python. Он поддерживает установку условных точек останова и пошаговое выполнение на уровне строки исходного кода, проверку стековых фреймов, листинг исходного кода и оценку произвольного кода Python в контексте любого стекового фрейма. Он также поддерживает посмертную отладку и может вызываться под управлением программы.
Отладчик является расширяемым - он фактически определяется как
класс pdb.Pdb()
.
Типичное использование для запуска программы под управлением отладчика:
>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
# > <string>(0)?()
# (Pdb) continue
# > <string>(1)?()
# (Pdb) continue
# NameError: 'spam'
# > <string>(1)?()
# (Pdb)
Модуль pdb
также может быть вызван как скрипт для отладки других скриптов.
python3 -m pdb myscript.py
При вызове в виде сценария модуль pdb
автоматически запускает post-mortem
отладку, если отлаживаемая программа завершает работу ненормально. После post-mortem
отладки или после обычного выхода из программы, модуль pdb
перезапустит программу. Автоматический перезапуск сохраняет состояние pdb
, например точки останова и в большинстве случаев более полезен, чем выход из отладчика при выходе из программы.
Типичное использование
pdb.set_trace()
для взлома отладчика из запущенной программы:
import pdb
class MyClass():
def __init__(self, loops):
self.count = loops
def start(self):
for i in range(self.count):
pdb.set_trace()
print(i)
return
if __name__ == '__main__':
MyClass(5).start()
Для команд и аргументов команд доступно завершение табуляции через
модуль readline
, например в качестве аргументов
команды p
предлагаются текущие глобальные и локальные имена.
$ python3 test.py
> /home/docs-python/test.py(10)start()
-> print(i)
(Pdb) p MyClass
<class '__main__.MyClass'>
(Pdb) p MyClass.start
<function MyClass.start at 0x7f623f0502f0>
(Pdb) p MyClass(2).start()
0
1
None
(Pdb)
Встроенная
функция breakpoint()
при вызове со значениями по умолчанию может использоваться вместо
import pdb; pdb.set_trace()
.
Типичное использование для проверки сбойной программы:
>>> import pdb
>>> import mymodule
>>> mymodule.test()
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "./mymodule.py", line 4, in test
# test2()
# File "./mymodule.py", line 3, in test2
# print(spam)
# NameError: spam
>>> pdb.pm()
# > ./mymodule.py(3)test2()
# -> print(spam)
# (Pdb)