前言
哈喽,大家好,我是知道。
今天给大家分享一些Python代码调试技巧,希望可以对刚开始接触Python的人能有所帮助。
Python调试神器PDB
PDB是Python自带的调试器,是Python Debugger的简称,为python程序提供了一个交互的调试功能。日常调试方式诸如设置断点、监控调用堆栈、查看变量、代码跳转等都可以通过相应的命令来完成。
1.1. breakpoint()函数 在代码中使用breakpoint()函数设置断点,当执行到函数时直接进入debug模式。例如下面代码,我们在第8行输入函数,创建断点:

使用命令行运行程序 python Calculate.py
,程序会自动运行到断点之后的第一个可执行语句,如本例中的第9行。

需要注意的是breakpoint()函数是Python 3.7新引入的,在3.7之前的版本无法使用。
1.2. 使用PDB模块 使用pdb模块debug分为两种方式:侵入式和非侵入式。
侵入式
顾名思义,需要在代码里面加入专门用于debug的语句,用函数pdb.set_trace()设置显式断点,同时要在代码中引用pdb模块。

与breakpoint()函数效果相似,程序也执行到断点之后的第一个可执行语句。

非侵入式
非侵入的方式不需要在程序中写入额外的代码,只需要在运行Python程序的时候通过-m命令指定加载pdb模块。
python -m pdb Calculate.py
程序会直接进入debug模式,停在第一行可执行程序的位置。

程序结束后会自动重头循环继续debug。

如果要退出可以使用命令q。

1.3. 常用PDB命令
| 命令 | 解释 |
|---|---|
| break 或 b | 设置断点 |
| continue 或 c | 继续执行程序 |
| list 或 l | 查看当前行的代码段 |
| step 或 s | 进入函数(进入 for 循环用 next 而不是用 step) |
| return 或 r | 执行代码直到从当前函数返回 |
| next 或 n | 执行下一行 |
| up 或 u | 返回到上个调用点(不是上一行) |
| p x | 打印变量x的值 |
| exit 或 q | 中止调试,退出程序 |
| help | 帮助 |
这里重点介绍一下如何用break命令设置断点。对于同一个文件里面设置断点,直接用break加上代码行号即可,比如我们的代码是

如果要在第21行设置断点,则应该输入b 21

注意如果行号对应的是注释或者空白,断点会设置失败

对于跨文件设置断点则需要break加”文件名:行号”。现在,我们将之前的代码拆分成两个python文件
Calculate.py

Run.py

执行run.py进入debug模式后,如果想要在Calculate.py里面设置断点

小技巧如果程序因为异常崩溃了,怎样快速返回到出现异常的代码行
比如,我们在代码里人为“制造”一个bug(第20行)

程序执行第21行调用divide函数会直接报除零异常

可以看到程序是直接报错退出的,只能通过报错信息以及最后调用堆栈进行分析,但很不方便。这个时候可以通过pdb.pm()
函数来回到直接产生错误的语句,具体操作如下:
执行程序的时候增加一个参数-i,作用是执行完python程序后进入一个交互式命令行,可以用于查询程序运行结果,以及出错时回到报错位置
python -i Calculate.py执行程序到报错退出后,会进入交互式命令行

在交互命令行执行 import pdb
加载PDB模块,再执行pdb.pm()
函数来回到报错行


使用pdb打印命令p可以查看变量的值,也可以用其它命令继续进行分析。

分析结束后使用使用q命令退出debug模式,再使用 quit()
命令退出交互命令行。

使用VS Code进行debug
作为VS Code编辑器的忠实粉丝,肯定要能在VS Code里面debug python代码才完美。那么在VS Code里面要如何配置呢,非常简单,下面跟随我一起来看一下。
2.1. 安装插件 想要在VS Code中debug,首先需要安装一个Python插件,这里推荐微软自己的Python插件


2.2. 设置断点 回到需要debug的python文件,将光标放在需要设置断点的代码行,然后按F9,或者在代码行数字前单击鼠标左键。

2.3. 启动Debugger 按F5进入debug模式,此时程序会停在断点的位置,第一次执行debug需要选择配置文件。

进入debug模式后,左侧面板中依次可以看到变量、观察点、调用栈、断点几个区域,可以在debug程序过程中用于分析。在代码编辑区域的上方可以看到一个操作条,用于控制执行代码。

继续执行程序,快捷键F5
单步执行,如果语句调用其它函数子程序,不进入子程序中,快捷键F10
单步进入,如果语句调用其它函数子程序,则进入子程序中,快捷键F11
单步退出,从当前所在的方法跳出,返回上一级代码,快捷键Shift+F11
重新启动,重新进入debug模式,停在设定断点的位置,快捷键Ctrl+Shift+F5
结束执行,结束debug模式,快捷键Shift+F5
2.4. 个性化配置debugger 除了使用默认的debugger配置文件,还可以通过维护launch.json文件来进行个性化设置,具体步骤如下:
指定项目工程文件夹
点击“open a folder“指定一个工程文件夹


VS Code会在指定的文件夹中创建一个名为.vscode的文件夹,用于保存项目工程的各种配置文件。
创建launch.json

选择相应的debug配置

完成之后,.vscode文件夹中会生成一个launch.json配置文件。
维护配置文件
打开launch.json文件可以看到VS Code已经生成了默认配置,接下来可以根据实际的需要来调整配置,具体语法可以参考这个链接:

如果需要多个配置文件,还可以在这里添加:

按提示操作后,launch.json文件中额外生成了一段配置信息,同时在左侧也能看到多了一个配置文件可以选择。

以上,就是关于Python代码调试的一些技巧,希望本文对你有所帮助,谢谢阅读。
我是知道,如果大家觉得文章还不错的话,欢迎大家三连(点赞+在看+收藏),您的鼓励将是我们更新的动力(^▽^)




