Отладка django / unittest?

#python #debugging #winpdb

#python #отладка #winpdb

Вопрос:

Мне интересно, есть ли у кого-нибудь подсказка о том, как отладить unittest или любой другой фрагмент кода в django, если уж на то пошло, используя отладчик, подобный winpdb? Я пытаюсь

 winpdb manage.py test photo
  

который запускает мой unittest для моего приложения photo, но winpdb выходит из строя. Есть ли альтернативы? Каков наилучший способ сделать это?

Я использую Linux, Ubuntu 10.10.

Ответ №1:

Вы можете использовать pdb для отладки вашей программы.

 import pdb
def some_function():
    pdb.set_trace()
    some_other_computation()
  

Когда программа нажимает на метод set_trace, выполнение приостанавливается, и вы попадаете в интерактивную оболочку. Затем вы можете изучить переменные и пошагово выполнить свой код.

Ответ №2:

Посмотрите на pudb, это полноэкранный консольный визуальный отладчик для Python. Очень удобно для отладки с хорошим консольным интерфейсом.

 import pudb
def some_function():
    pudb.set_trace()
    some_other_computation()
  

Вам нужно будет передать параметр -s (например: python manage.py test -s ), чтобы отключить захват выходных данных (который предотвращает запуск отладчика).

Ответ №3:

Добавьте в свой код следующие строки:

 import rpdb2; 
rpdb2.start_embedded_debugger_interactive_password()
  

Вы можете найти более подробную информацию здесь:http://winpdb.org/docs/embedded-debugging

Ответ №4:

Проблема в том, что django создает другой процесс, в котором он запускает тестируемое приложение. Таким образом, вы не можете просто использовать winpdb в своем основном процессе django.

Вы должны вызвать отладчик rpdb2 (внутренний отладчик winpdb) непосредственно перед местом, которое вы хотите протестировать, и подключиться с помощью winpdb к этому запущенному отладчику.

Смотрите руководство здесь:https://code.djangoproject.com/wiki/DebuggingDjangoWithWinpdb

Комментарии:

1. Django не «создает другой процесс, в котором он запускает тестируемое приложение»; это просто false.