Сообщить об ошибке.

Модуль pdb, отладчик Python

Отладчик программ, написанных на 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()

Затем вы можете пройти по коду после pdb.set_trace() и продолжить работу без отладчика, используя команду continue.

Для команд и аргументов команд доступно завершение табуляции через модуль 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)