暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python代码调试技巧分享

Python都知道 2022-09-14
337


前言

哈喽,大家好,我是知道。

今天给大家分享一些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代码调试的一些技巧,希望本文对你有所帮助,谢谢阅读。

我是知道,如果大家觉得文章还不错的话,欢迎大家三连(点赞+在看+收藏),您的鼓励将是我们更新的动力(^▽^)


文章转载自Python都知道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论