使用Emacs调试Django

24

我发现有很多关于如何使用Emacs调试简单Python程序的信息。但是如果我想要调试一个Django应用程序怎么办? 我运行了开发服务器,并且希望可以从Emacs连接到该进程,然后设置断点等。就像Visual Studio的“附加到进程”功能一样。该如何实现呢?

6个回答

20

这并不是专门针对emacs的技巧,但是您可以通过在Django视图函数中添加以下内容来使用Python调试器:

import pdb; pdb.set_trace()

现在当您运行开发服务器并查看页面时,您的浏览器将出现挂起或加载非常缓慢的情况 - 切换到控制台,您就可以访问完整的调试器了。 您可以通过交互式shell检查和修改应用程序的状态 - 查看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”。

此外,如果您正在使用pdb和Emacs,请查看[PDBtrack](http://wiki.zope.org/klm/PDBTrack)。 - Noufal Ibrahim

3
昨晚我找到了一款可以在程序崩溃时做到你想要的功能的东西:http://code.google.com/p/django-command-extensions/。安装后,你可以运行以下命令:

python manage.py runserver_plus

然后你将在你的错误页面上拥有一个交互式AJAX控制台。 (显然,在这种模式下运行时,请注意人们对此Web服务器的访问权限。)
GitHub: https://github.com/django-extensions/django-extensions
你可以使用pip或easy_install获取Django扩展:

$ pip install django-extensions or $ easy_install django-extensions

如果你想从源代码安装它,请从 GitHub 上抓取 git 存储库并运行 setup.py:

$ git clone git://github.com/django-extensions/django-extensions.git
$ cd django-extensions
$ python setup.py install


1

因为最近版本的Emacs Python模式默认支持'pdbtrack'功能,所以你只需要按照以下方式在你的代码中设置断点:

import pdb; pdb.set_trace()

此外,您必须从Emacs shell中启动Django应用程序devserver: M-x shell 然后,在shell中启动Django开发服务器:
python ./manage.py runserver

顺便提一句,不需要特定的 pdb 会话或 --noreload 标志。使用 Noreload 会要求您手动重启应用程序,因此我认为这对于 Emacs 没有什么用处。


0

我对此并不了解,但在Google中输入“使用emacs调试Python”给我带来了这个关于使用emacs调试twisted的页面,所以似乎是可能的。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接