使用Emacs调试Django

24 投票
6 回答
5780 浏览
提问于 2025-04-11 17:48

我找到很多关于如何在Emacs中调试简单Python程序的信息。但是如果我想调试一个Django应用程序呢?我启动了开发服务器,想要从Emacs连接到这个进程,然后设置断点等等。这有点像Visual Studio中的“附加到进程”。我该怎么做呢?

6 个回答

3

我昨晚发现了一个东西,可以在程序崩溃时帮你解决问题:

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

20

这不是专门针对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")
15

这样启动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

撰写回答