Кен Томпсон

Wiki

Томпсон

img

print

Сейбел: Какие инструменты вы используете при отладке?

Томпсон: В основном вывод на печать. При разработке программы я размещаю очень много операторов вывода на печать.

Чуть лучше чем принт

logging

  • Во время разработки можно выводить сообщения на экран
  • В продакшене, пишем сообщения уже в логгер (syslog, просто в файл)
  • Можем настраивать режими отладки

PDB

myobj.py

from dataclasses import dataclass
@dataclass
class MyObj:
    n: int
    def go(self):
        for i in range(self.n):
            print(i)
if __name__ == "__main__":
    MyObj(5).go()

python -m pdb ./myobj.py

PDB

Можно вызвать в рамках Python-сессии

import pdb
from myobj import MyObj

pdb.run("MyObj(5).go()")

PDB

Чаще всего может потребоваться перейти в режим отладки в определённом месте программы

# тут какой-то код
def main(request):
    import pdb # ipdb
    pdb.set_trace() # ipdb.set_trace()
    data = request.GET
# дальше много кода

PDB

try:
    some_code()
except:
    import sys
    import ipdb
    tb = sys.exc_info()[2]
    ipdb.post_mortem(tb)

PDB

  • h(elp) [command]: выведет подсказку по доступным командам
  • a(rgs): напечать аргументы текущей функции (текущего стека вызовов)
  • p : напечатать содержимое переменной или результат вызова
  • pp : красиво напечатать
  • w(here): покажет стектрейс как вы очутились в текущем месте кода
  • l(ist) [start [end]]: выведет по 5 строк вокруг текущей или вокруг заданной, либо выведет строки со start по end
  • u(p) / d(own): перемещение по стеку вызовов

PDB

  • ! выражение: выполнить выражение, например переопределить значение переменной
  • s(tep): зайти внутрь вызова
  • n(ext): следующая строка кода
  • b(reak) [ ([filename:]lineno | function) [, condition] ]: добавить точку останова
  • tbreak [([filename:]lineno | function) [, condition]]: одноразовая точка останова
  • condition bpnumber [condition]: добавить условие для точки останова
  • disable / enable tbnumber: выкл / вкл точку останова
  • cl(ear) (filename:lineno | bpnumber): удалить точку останова

Дополнительное чтение

PuDB

python -m pudb myobj.py

img

Visual Studio Code / PyCharm

runserver_plus

installation instruction

WERKZEUG_DEBUG_PIN=1234 \
    python manage.py runserver_plus