IT课程分享

如何用Python调试器修复代码?

2018-06-27  本文已影响34人  蓝桥云课

使用Python调试器

调试器是一个工具,它允许你打开应用程序的内部以找出需要修复的内容。 你可以查看变量和调用堆栈,设置条件断点,逐行扫描源代码,并执行需要执行的操作。

在调试时Python提供了更多的可能性——不仅可以查看过程中的代码,还可以运行在调试器命令行中编写的代码。

Python的秘密武器是它自己的内置调试器,称为pdb。简单的命令行界面具有你可能需要的所有基本调试器功能。但是当你寻找更复杂的东西时,你可以使用ipdb来扩展,这为调试器提供了一些来自IPython的额外功能。

最简单的使用方式是直接调用。

import pdb; pdb.set_trace()

运行解释器,一旦它到达这一行,你就会在你正在使用的程序终端上得到一个命令提示符。

列表(L)

使用list(l)命令来查看Python解释器当前所在的代码行,也可以用来检查代码的不同区域。 它有第一和最后一行显示的参数。 但是,如果提供第一行的编号,那只能看到围绕特定行的代码。

(p)和(d)

up(p)down(d)是用来浏览调用栈的命令。 例如,使用这两个函数来查看谁在调用当前函数,或者为什么解释器会这样。

step(s)和next(n)

另一对重要的命令是step(s)next(n)。 它们之间的唯一区别是next(n)只会进入当前函数的下一行,即使它调用了另一个函数, step(s)将更深入。

break(b)

如果需要在不更改代码的情况下设置新断点,则使用break(b)命令。

在此之前,简单介绍一下其他所有的pdb命令:

来源:Django Stars Blog

关于break

以前必须更改代码来打印某些内容或设置断点,有时必须在第三方包中设置断点。可以随时在虚拟环境中打开库的源代码并添加对pdb的调用。

现在可以从调试器运行应用程序,并设置需要的断点,而无需更改任何源代码。使用命令python -m pdb <python script>来执行调试器的应用程序。

示例:使用一个简单的应用程序跟踪工作时间。

在这个应用程序的内部,使用 requests 库来发出HTTP请求。使用调试器运行应用程序,并在所述库内设置断点来打破post请求。

$ python -m pdb run.py
> /Users/.........................../run.py(1)<module>()
-> from TimeLog.app import run_app
(Pdb) b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555  
(Pdb) c

不必输入完整的源文件路径,只是从sys.path中的某个文件夹中放入一个相对路径。

应用程序可能会运行很多调用,但有时你只需要一个特定的调用。那该怎么做? 在这种情况下,可以指定一个断点条件,只有当这个条件为True,调试器才会中断应用程序。

在这个例子中,只有当json有一个time_entry键时,应用程序才会中断。

python -m pdb run.py  
> /Users/...../run.py(1)<module>()
-> from TimeLog.app import run_app
(Pdb) b requests/sessions.py:555, json is not None and 'time_entry' in json
Breakpoint 1 at /Users/....../lib/python3.6/site-packages/requests/sessions.py:555  
(Pdb) c

Django的调试助手

使用Django Web框架,如果DEBUG在设置中设置为True,那么在任何异常时都会获得一个包含以下信息的特殊页面:异常类型和消息,回溯,局部变量等。

安装django-extensions并使用runserver_plus命令启动Django服务器。设置调试器引脚的操作方法:

WERKZEUG_DEBUG_PIN=1234 ./manage.py runserver_plus

通过使用django-extensions得到了一个追溯页面,可以看到每一行代码和一个打开的调试器。

然后在Werkzeug项目的帮助下执行调试过程,该项目是Python的WSGI库。

更多趣味实验可以直接访问实验楼,在线实验环境操作方便,为大家定期更新最佳实验!(●'◡'●)

上一篇 下一篇

猜你喜欢

热点阅读