Python 使用Emacs进行Django调试

Python 使用Emacs进行Django调试,python,django,debugging,emacs,Python,Django,Debugging,Emacs,我发现了很多关于如何使用Emacs调试简单Python程序的信息。但是如果我想调试Django应用程序呢? 我运行开发服务器,希望以某种方式从Emacs附加到进程,然后设置断点等,类似于Visual Studio的“附加到进程”。如何做到这一点?我对它一无所知,但将“使用emacs调试Python”放到Google中让我看到了这一页,所以这似乎是可能的。这不是emacs特有的,但您可以通过向Django view函数添加以下内容来使用Python调试器: import logging loggi

我发现了很多关于如何使用Emacs调试简单Python程序的信息。但是如果我想调试Django应用程序呢?
我运行开发服务器,希望以某种方式从Emacs附加到进程,然后设置断点等,类似于Visual Studio的“附加到进程”。如何做到这一点?

我对它一无所知,但将“使用emacs调试Python”放到Google中让我看到了这一页,所以这似乎是可能的。

这不是emacs特有的,但您可以通过向Django view函数添加以下内容来使用Python调试器:

import logging
logging.debug("Something happened")
导入pdb;pdb.set_trace()

现在,当您运行开发服务器并查看页面时,您的浏览器将显示为挂起或加载非常缓慢-切换到控制台,您可以访问完整的调试器。您可以通过一个交互式shell检查和修改应用程序的状态—查看调试器的Python文档,或者查看一些相关链接


如果只需要记录日志,请将以下内容添加到
设置.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")

这是我昨晚发现的一个东西,当程序崩溃时,它将完全满足您的要求:

安装后,即可运行:

python manage.py runserver\u plus

您将在
错误
页面上有一个交互式
AJAX控制台
。(显然,在该模式下运行时,请注意用户对该web服务器的访问量。)

GitHub:

您可以使用pip或easy_安装获得Django扩展:

$pip安装django扩展或$easy_安装django扩展

如果要从源代码处安装,请从GitHub获取git存储库并运行setup.py:

$git克隆git://github.com/django-extensions/django-extensions.git
$cd django扩展名
$python setup.py安装

按如下方式启动pdb:

M-x
pdb

然后,启动Django开发服务器:

python manage.py runserver --noreload
python ./manage.py runserver
出现(Pdb)提示后,需要执行以下操作:

import sys
sys.path.append('/path/to/directory/containing/views.py')
完成此操作后,您应该能够正常设置断点。只需导航到所需的行号,然后


C-x SPC

关于一般的非emacs独占方式,有一个非常好的屏幕,您可能会感兴趣:

上面描述的emacs集成对我来说还不起作用。它似乎并没有真正连接到正在运行的应用程序

另外,我认为这篇博文非常有趣:

特写
Roman

因为Emacs python模式的最新版本默认支持“pdbtrack”功能,所以您只需在代码中设置断点即可:

import pdb; pdb.set_trace()
此外,还必须从Emacs shell中启动Django应用程序devserver:

M-x
shell

然后,在shell中启动Django开发服务器:

python manage.py runserver --noreload
python ./manage.py runserver

注意:不需要特定的pdb会话或--noreload标志。Noreload将要求您手动重新启动应用程序,因此我认为这对Emacs没有用处。

此外,如果您正在使用pdb和Emacs,请退出。