So, I started learning to code in Python and later Django. The first times it was hard looking at tracebacks and actually figure out what I did wrong and where the syntax error was. Some time has passed now and some way along the way, I guess I got a routine in debugging my Django code. As this was done early in my coding experience, I sat down and wondered if how I was doing this was ineffective and could be done faster. I usually manage to find and correct the bugs in my code, but I wonder if I should be doing it faster?

我通常只使用Django启用时提供的调试信息。当事情确实像我想象的那样结束时,我用一个语法错误破坏了代码流,并查看流中那个点的变量,以找出代码在哪里做了与我想要的不同的事情。

但这种情况还能改善吗?是否有一些更好的工具或方法来调试Django代码?


当前回答

我刚找到wdb (http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401)。它有一个非常漂亮的用户界面/ GUI,所有的铃铛和口哨。作者这样说wdb -

“像PyCharm这样的ide有自己的调试器。它们提供了相似或相同的功能……然而,要使用它们,你必须使用那些特定的ide(其中一些是非免费的,或者可能不适用于所有平台)。根据你的需要选择合适的工具。”

我想我应该把它传下去。

这也是一篇关于python调试器的非常有用的文章: https://zapier.com/engineering/debugging-python-boss/

最后,如果你想在Django中看到一个漂亮的调用堆栈的图形打印输出,checkout: https://github.com/joerick/pyinstrument。只需将pyinstrument.middleware.ProfilerMiddleware添加到MIDDLEWARE_CLASSES中,然后将?profile添加到请求URL的末尾以激活剖析器。

也可以从命令行或导入作为模块运行pyinstrument。

其他回答

有很多方法可以做到这一点,但最直接的是简单 使用Python调试器。只需在Django视图函数中添加如下一行:

import pdb; pdb.set_trace()

or

breakpoint()  #from Python3.7

如果您试图在浏览器中加载该页,浏览器将挂起,并提示您对实际执行的代码进行调试。

但是也有其他的选择(我不推荐):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

但是对于所有类型的Python代码,强烈推荐使用Python调试器(pdb)。如果您已经开始使用pdb,那么您还需要了解使用ipython进行调试的IPDB。

对pdb有一些更有用的扩展

pdb++,由Antash建议。

pudb,由PatDuJour建议。

在Django中使用Python调试器,由Seafangs建议。

我强烈建议使用PDB。

import pdb
pdb.set_trace()

您可以检查所有变量值,进入函数和更多。 https://docs.python.org/2/library/pdb.html

用于检查对数据库的各种请求、响应和命中。我正在使用django-debug-toolbar https://github.com/django-debug-toolbar/django-debug-toolbar

调试python的最简单的方法——尤其是对习惯于Visual Studio的程序员来说——是使用PTVS (python Tools for Visual Studio)。 步骤很简单:

从https://microsoft.github.io/PTVS/下载并安装它 设置断点并按F5。 您的断点被击中,您可以查看/更改变量,就像调试c# / c++程序一样简单。 这就是全部:)

如果你想使用PTVS调试Django,你需要做以下事情:

在Project settings - General选项卡中,将“Startup File”设置为“manage.py”,这是Django程序的入口点。 在“项目设置-调试”选项卡中,将“脚本参数”设置为“runserver—noreload”。这里的关键点是“—noreload”。如果你不设置它,你的断点就不会被击中。 享受它。

有一些工具配合得很好,可以使您的调试任务更容易。

最重要的是Django调试工具栏。

然后需要使用Python日志工具进行良好的日志记录。您可以将日志输出发送到日志文件,但更简单的选择是将日志输出发送到firepython。要使用此功能,您需要使用带有firebug扩展的Firefox浏览器。Firepython包含一个firebug插件,可以在firebug选项卡中显示任何服务器端日志记录。

Firebug本身对于调试您所开发的任何应用程序的Javascript方面也很重要。(当然前提是你有一些JS代码)。

我也喜欢django-viewtools,它可以用pdb交互地调试视图,但是我不怎么用它。

还有更有用的工具,如dozer,可以跟踪内存泄漏(在SO的回答中也有其他关于内存跟踪的好建议)。

如果在django开发中使用Aptana,请注意:http://www.youtube.com/watch?v=qQh-UQFltJQ

如果没有,考虑使用它。