Отладка 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:

view

Вставим import pdb; pdb.set_trace() в нужное место и запустим локальный сервер, если не запущен:

view_pdb

В браузере обратимся к странице, которая вызывает этот view. Страница замерла:

browser_hang

В консоле видим (Pdb):

pdb_console

Посмотрим, где мы, командой l:

pdb_l

Сделаем два шага веред командой n:

pdb_nn

Посмотрим значение переменных about и about.content:

pdb_p

Продолжим выполнение командой c:

pdb_c

Страница отобразилась в браузере:

browser_done

Comments powered by Disqus