Я нашел много информации о том, как отлаживать простые программы Python с помощью Emacs. Но что, если я хочу отлаживать приложение Django? Я запускаю сервер разработки, и я хотел бы как-то подключиться к процессу из Emacs, а затем установить точки останова и т.д. Подобно Visual Studio "присоединяется к процессу". Как это сделать?
Отладка Django с помощью Emacs
Ответ 1
Запустите pdb следующим образом:
M-x pdb
Затем запустите сервер разработки Django:
python manage.py runserver --noreload
Как только у вас появится приглашение (Pdb), вам нужно сделать это:
import sys
sys.path.append('/path/to/directory/containing/views.py')
Как только вы это сделаете, вы сможете установить контрольные точки в обычном режиме. Просто перейдите к нужному номеру строки и
C-x SPC
Ответ 2
Это не относится к emacs, но вы можете использовать отладчик Python, добавив следующее в функцию просмотра Django:
import pdb; pdb.set_trace()
Теперь, когда вы запустите сервер разработки и просмотрите страницу, ваш браузер, похоже, будет медленно или медленно загружаться - переключитесь на консоль и получите доступ к полному отладчику. Вы можете проверить и изменить состояние своего приложения через интерактивную оболочку - проверить документацию Python для отладчика или эту ссылку для некоторых примеров отладки Python
Если вам нужно всего лишь регистрировать, добавьте следующее к settings.py
:
logging.basicConfig(
level = logging.DEBUG,
format = '%(asctime)s %(levelname)s %(message)s',
filename = '/tmp/mylog.log',
filemode = 'w'
)
Теперь вы можете записывать сообщения в /tmp/mylog.log
, добавляя к любой функции просмотра следующее:
import logging
logging.debug("Something happened")
Ответ 3
Здесь что-то, что я нашел вчера вечером, будет делать именно то, что вы хотите, когда программа выйдет из строя:
http://code.google.com/p/django-command-extensions/
После установки, которую вы можете запустить:
python manage.py runningerver_plus
и на странице Error
вы получите интерактивный AJAX console
. (Очевидно, будьте осторожны с тем, сколько людей имеют доступ к этому веб-серверу при работе в этом режиме.)
GitHub: https://github.com/django-extensions/django-extensions
Вы можете получить расширения Django с помощью pip или easy_install:
$pip установить django-extensions или $easy_install django-extensions
Если вы хотите установить его из источника, возьмите репозиторий git из GitHub и запустите setup.py:
$git клон git://github.com/django-extensions/django-extensions.git
$ cd django-extensions
$ python setup.py install
Ответ 4
Поскольку последние версии режима python Emacs поддерживают функцию "pdbtrack" по умолчанию, все, что вам нужно, это просто настроить точку останова в коде следующим образом:
import pdb; pdb.set_trace()
Кроме того, вы должны запустить devserver приложения Django из оболочки Emacs:
M-x shell
И затем в оболочке запустите сервер разработки Django:
python ./manage.py runserver
P.S. Нет необходимости в конкретных сеансах pdb или -noreload. Noreload потребует, чтобы вы вручную перезапустили свои приложения, и поэтому я не считаю это полезным для Emacs.
Ответ 5
Я ничего не знаю об этом, но, поставив "отладку Python с emacs" в Google, дал мне эту страницу о отладка, скрученная с emacs, так что это кажется возможным.
Ответ 6
Об общем эксклюзивном способе, отличном от emacs, есть очень хороший screencast, который вас может заинтересовать: http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/
Интеграция Emacs, описанная выше, пока не работает. На самом деле это не похоже на запущенное приложение.
Далее я считаю, что это сообщение в блоге очень интересно: http://web.archive.org/web/20101230072606/http://panela.blog-city.com/python_and_emacs_5_pdb_and_emacs.htm
у.е. Roman