Отладка django проекта с помощью встроенного python отладчика pdb
Я использую sublime-text в качестве редактора python кода. В нем нет встроенного отладчика, поэтому для отладки django проектов я в основном делал так:
print var_name
и в консоле локального сервера смотрел вывод команды. Я использую этот метод и сейчас, но иногда хочется пройтись по коду по шагам, посмотреть все переменные.
Это можно сделать с помощью встроенного python отладчика pdb:
import pdb; pdb.set_trace()
Т.е. мы вставляем эту строку в то место в коде, где мы хотим остановиться. Это брейкпоинт. Теперь обновим страницу проекта в браузере. Когда код проекта дойдет до этой строки, браузер замрет, а в консоле локального сервера появиться:
(Pdb)
Мы попали в отладчик и теперь можем вводить комманды, например такие:
- l - посмотреть, где мы находимся
- n - (step next) сделать шаг вперед, не входя внутрь функции
- s - (step in) сделать шаг внутрь, т.е. если стоим на вызове функции, войдем внутрь
- r - (step out) продолжить выполнение до конца текущего блока. Например, мы стоим внутри цикла, вводим r и попадаем на первую после цикла строку.
- c - продолжить выполнение до следующего брейкпоинта, т.е. до
pdb.set_trace()
- p - выполнить питон код, или просто показать переменную:
p var_name
Пример
Допустим у нас есть такой view:
Вставим import pdb; pdb.set_trace()
в нужное место и запустим локальный сервер, если не запущен:
В браузере обратимся к странице, которая вызывает этот view. Страница замерла:
В консоле видим (Pdb):
Посмотрим, где мы, командой l
:
Сделаем два шага веред командой n
:
Посмотрим значение переменных about
и about.content
:
Продолжим выполнение командой c
:
Страница отобразилась в браузере: