使用Emacs调试Django
我找到很多关于如何在Emacs中调试简单Python程序的信息。但是如果我想调试一个Django应用程序呢?我启动了开发服务器,想要从Emacs连接到这个进程,然后设置断点等等。这有点像Visual Studio中的“附加到进程”。我该怎么做呢?
6 个回答
我昨晚发现了一个东西,可以在程序崩溃时帮你解决问题:
http://code.google.com/p/django-command-extensions/
安装完这个之后,你可以运行:
python manage.py runserver_plus
这样你就能在出错页面上看到一个互动的 AJAX 控制台
。 (当然,运行这个模式时,要小心别人对这个网络服务器的访问权限。)
GitHub 地址:https://github.com/django-extensions/django-extensions
你可以通过 pip 或 easy_install 来安装 Django 扩展:
$ pip install django-extensions 或 $ easy_install django-extensions
如果你想从源代码安装,可以从 GitHub 下载代码库,然后运行 setup.py:
$ git clone git://github.com/django-extensions/django-extensions.git
$ cd django-extensions
$ python setup.py install
这不是专门针对emacs的,但你可以通过在Django的视图函数中添加以下代码来使用Python调试器:
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")
这样启动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