Python使用pdb调试代码的技巧


Posted in Python onMay 03, 2020

Python使用pdb调试代码的技巧

什么是pdb

不知道大家在用Python写代码出现报错时是怎样调试的,从报错提示定位回去一步一步check每一行?如果没有IDE或者命令行写代码时又该怎样快速调试?这时如果使用pdb进行调试将会异常方便。

Pdb就是Python debugger,是python自带的调试器。通过 pdb 我们可以交互式的查看运行过程中变量的值、设置断点、逐行执行代码、查看代码的调用栈等等。并且如果环境没有 GUI 的话,那么 pdb 能够助你更快速的调试代码。

首先我们准备一段有问题的代码用于示例

def test(p):
  p = p + 1
  
  return p

def fastdebug():
  print('start')
  temp = 'ready' 
  print('ok')
  res = test(temp) 
  print('end')
  
fastdebug()

这段代码很简单,当我们执行fastdebug()时,会执行fastdebug函数并在该函数中调用另一个函数test(),test函数接收一个参数p并计算p+1的值传出。很明显,在高亮的一句代码中传进去的参数temp是str,所以当我们执行上面一段代码时一定会报错

Python使用pdb调试代码的技巧

现在让我们假装不知道问题出在哪,使用pdb来调试这段代码。

使用pdb

由于pdb是python标准库因此我们可以直接import 使用

import pdb

接着在我们需要调试的代码段前设一个断点

pdb.set_trace()

应用到我们的代码:point_down:

Python使用pdb调试代码的技巧

可以看到运行代码后,pdb的调试器控制台将从放置set_trace()的位置开始等待我们的命令,并且箭头标记指向pdb接下来要运行的行。那么接下来介绍一些pdb中常用命令

使用n来执行下一行

可以看到此时调试器指向

print('start')

在弹出的文本框中输入n即可执行该行,并且箭头将指向下一行即将执行的代码

Python使用pdb调试代码的技巧

使用ENTER重复上一个命令

现在还没有到报错的位置,我们使用n或者直接回车重复执行上一个命令

Python使用pdb调试代码的技巧

使用p打印变量值

在Pdb中我们可以使用p + 变量名来查看变量值,比如我们查看变量temp的值

Python使用pdb调试代码的技巧

使用l查看上下行代码

在Pdb中我们可以使用l查看当前行上下几行代码

Python使用pdb调试代码的技巧

使用s进入子函数

现在,我们来到出错的这一行,之所以报错就是传进去变量出了问题,因此我们可以在pdb交互行中使用s来进入子函数test()

Python使用pdb调试代码的技巧

使用r执行函数直到结束

在pdb中可以使用r来执行当前运行函数到结束

Python使用pdb调试代码的技巧

使用c停止调试并继续运行

现在我们修改相关代码完成调试,可以使用c命令继续执行命令

Python使用pdb调试代码的技巧

当然也可以输入q直接退出调试界面

以上就是使用Python标准库执行一次debug过程,可以看到pdb在命令行下调试代码是非常出色的,当然在某些情况下pdb将不是最好的选择比如涉及到多线程相关,而在比较大型的项目使用pdb也显得力不从心,因此我们需要灵活选择调试方案,不过至少我们又掌握了一种代码调试工具,不是吗?

Python 相关文章推荐
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
Jan 19 Python
Python写的贪吃蛇游戏例子
Jun 16 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python切片知识解析
Mar 06 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
python2和python3在处理字符串上的区别详解
May 29 Python
Python查找不限层级Json数据中某个key或者value的路径方式
Feb 27 Python
基于python纯函数实现井字棋游戏
May 27 Python
python 如何在list中找Topk的数值和索引
May 20 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 #Python
Python使用多进程运行含有任意个参数的函数
May 02 #Python
python多进程使用函数封装实例
May 02 #Python
Python中使用filter过滤列表的一个小技巧分享
May 02 #Python
python同时遍历两个list用法说明
May 02 #Python
python多线程实现同时执行两个while循环的操作
May 02 #Python
python 实现两个线程交替执行
May 02 #Python
You might like
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
js实现网页收藏功能
2015/12/17 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python字符串对象实现原理详解
2019/07/01 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
后备干部考察材料
2014/02/12 职场文书
学生评语大全
2014/04/18 职场文书
初三学习计划书范文
2014/04/30 职场文书
体育活动总结范文
2014/05/04 职场文书
护理专业自荐信范文
2015/03/06 职场文书
仙境之桥观后感
2015/06/16 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS