Python调试器pdb

  • 1. pdb简介
  • 2. pdb调试
    • 2.1 pdb常用命令
    • 2.2 pdb实例

更新历史:

  • 2022年12月6日完成初稿

最近在写项目代码,其中需要在Vscode上写python代码,有用命令行调试代码的需求,因此学习了一些Python调试器pdb的知识,一定程度上解决了代码调试的问题。

本文主要参考Python3官方文档:pdb — Python 的调试器,执行环境为Ubuntu 20.04.2 LTS,Python版本为3.7.0

1. pdb简介

pdb 是 Python 的模块,其定义了一个交互式源代码调试器,支持 Python 程序在源码行间设置(有条件的)断点和单步执行。pdb 主要有两种使用方法:

  • pdb.py 作为脚本调用,来调试其他脚本(不用额外修改源代码,在命令行下直接运行就能调试)
>>> python -m pdb test.py
  • 在调试器的控制下运行程序(需要在被调试的代码中添加一行代码然后再正常运行代码)
>>> import pdb;pdb.set_trace()   # 设置断点

在项目中,我主要是用了第一种方式,因此下面主要介绍第一种方式。

2. pdb调试

2.1 pdb常用命令

pdb命令 解释
s(tep) 运行当前行,在第一个可以停止的位置(在被调用的函数内部或在当前函数的下一行)停下
n(ext) 继续运行,直到运行到当前函数的下一行,或当前函数返回为止。 ( nextstep 之间的区别在于,step 进入被调用函数内部并停止,而 next (几乎)全速运行被调用函数,仅在当前函数的下一行停止。)
j(ump) lineno 设置即将运行的下一行。例如j 10表示跳转至代码第10行(被跳过的代码不执行)
unt(il) lineno 如果不带行号,则继续运行,直到行号比当前行大时停止;如果带有行号,则继续运行,直到行号大于或等于该行号时停止。例如unt 10表示代码运行至第10行
a(rgs) 打印当前函数的参数列表
r(eturn) 继续运行,直到当前函数返回。
p expression 打印表达式expression的值
q(uit) 退出调试器,被执行的程序将被中止

2.2 pdb实例

假设演示的项目代码如下:

import numpy as npdef mat_mul(A, B): # 矩阵乘法assert A.shape[1] == B.shape[0]return np.dot(A, B)if __name__ == "__main__":A = np.arange(12).reshape(3, 4)B = np.arange(20).reshape(4, 5)C = mat_mul(A, B)print("C = A * B = ", C)

如上所述,在输入上述命令后,程序便可进入调试模式:

>>> (base) root@yp:~/yp_workplace/# python -m pdb test.py
> /root/yp_workplace/test.py(1)<module>()
-> import numpy as np
(Pdb)

当你在命令行看到(Pdb) 时,说明已经正确打开了pdb,下面便可根据所需来调试代码,如下所述:

(base) root@yp:~/yp_workplace# python -m pdb test.py
> /root/yp_workplace/test.py(1)<module>()
-> import numpy as np
(Pdb) n             # 进入下一行代码
> /root/yp_workplace/test.py(3)<module>()
-> def mat_mul(A, B):
(Pdb) n
> /root/yp_workplace/test.py(8)<module>()
-> if __name__ == "__main__":
(Pdb) n
> /root/yp_workplace/test.py(9)<module>()
-> A = np.arange(9).reshape(3, 3)
(Pdb) n
> /root/yp_workplace/test.py(10)<module>()
-> B = np.arange(12).reshape(3, 4)
(Pdb) n
> /root/yp_workplace/test.py(11)<module>()
-> C = mat_mul(A, B)
(Pdb) s             # 进入到mat_mul函数内部
--Call--
> /root/yp_workplace/test.py(3)mat_mul()
-> def mat_mul(A, B):
(Pdb) n
> /root/yp_workplace/test.py(4)mat_mul()
-> assert A.shape[1] == B.shape[0]
(Pdb) n
> /root/yp_workplace/test.py(5)mat_mul()
-> return np.dot(A, B)
(Pdb) n
--Return--
> /root/yp_workplace/test.py(5)mat_mul()->array([[ 20, ...3, 134, 155]])
-> return np.dot(A, B)
(Pdb) n
> /root/yp_workplace/test.py(12)<module>()
-> print("C = A * B = ", C)
(Pdb) n
C = A * B =  [[ 20  23  26  29][ 56  68  80  92][ 92 113 134 155]]
--Return--
> /root/yp_workplace/test.py(12)<module>()->None
-> print("C = A * B = ", C)
(Pdb) q             # 退出调试模式

【Python基础】Python调试器pdb相关推荐

  1. python文档测试_【Python入门】19.调试器pdb、单元测试unittest和文档测试doctest

    笔记更新于2019年12月4日, 摘要:各种调试方法介绍assert.logging.调试器pdb:单元测试unittest的编写方法.如何运行单元测试:文档测试doctest的编写 写在前面:为了更 ...

  2. 【Python】Python调试器pdb

    Python调试器pdb使用 PDB调用启动方法 PDB常用命令 PDB调用启动方法 pdb有2种用法: 非侵入式(不用额外修改源代码,在命令行下直接运行就能调试) python3 -m pdb fi ...

  3. python:bdb --- 调试器框架

    python:bdb --- 调试器框架 bdb 模块处理基本的调试器函数,例如设置中断点或通过调试器来管理执行. 定义了以下异常: exception bdb.BdbQuit 由 Bdb 类引发用于 ...

  4. Python基础-Python基础使用

    Python基础-Python基础使用 1.Python解释器 在Python文件的开头加入以下代码就制定了解释器. #!/usr/bin/env python # _*_ coding:utf-8 ...

  5. python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值

    python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...

  6. Python调试器-Pdb的简介及调试命令

    Pdb简介 pdb为Python程序定义了一个交互式源代码调试器.它支持在源代码行级别设置(条件)断点和单步执行,检查堆栈框架,源代码列表以及在任何堆栈框架的上下文中评估任意Python代码.它还支持 ...

  7. Python调试器-Pdb

    晚上在debug代码的时候,发现有的时候,源码没有问题,控制台处也有运行结果,但是没法看到变量情况.这对理解代码很不方便.原因可能是因为数据量太大了,导致后面加载变量的时候可能内存爆了 处理方式:Pd ...

  8. Python的PyDBG调试器的用法

    pydbg调试器的安装与使用,如果你已经会了就跳过此步骤,如果调试器没有成功安装,可以下载:PyDBG下载安装 调试器属于PaiMei框架下的一个子模块:http://www.openrce.org/ ...

  9. python IDLE 的调试器

    "调试器"是 IDLE 的一项功能,让你每次执行一行程序.调试器将运行一行代码,然后等待你告诉它继续.像这样让程序运行"在调试器之下",你可以随便花多少时间,检 ...

最新文章

  1. 基于深度连续融合的多传感器三维目标检测
  2. 机器人抓取领域相关数据集
  3. 一些有用的Python库
  4. vue :src 文件路径错误
  5. Greenplum【环境搭建 02】GP 数据库 web 监控工具 Greenplum Command Center v6.6.0 安装配置及问题处理(一篇学会部署配置启动 GPCC 避坑指南)
  6. iOS之获取手机的系统信息
  7. 云服务器的操作系统是什么,服务器操作系统是什么?云服务器的操作系统怎么选择...
  8. io密集型和cpu密集型_一次说明白Python爬虫中多线程,多进程,异步IO编程
  9. Linux/Unix 多线程通信
  10. How to live?
  11. 前端相关书籍(转摘)
  12. 基于大并发抽奖的队列实现
  13. 深入了解JavaScript编程语言
  14. java vcf文件增量写入,用snpEFF对vcf格式的突变数据进行注释
  15. 计算机组成原理与汇编语言试题,2069电大《计算机组成原理与汇编语言》试题和答案2005...
  16. html如何修改按钮样式,css怎么设置按钮样式?
  17. vs2008 web创作组件安装失败
  18. JAVA实现手机短信验证码在指定有效的时间里校验
  19. Python绝技第一章 入门 python3实现密码破解
  20. TinyPng:在线PNG图片压缩工具

热门文章

  1. 公众号类型的接口权限说明
  2. linux创建vg、lv
  3. es5与es6的区别
  4. 计算机 设置登录密码 无效,bios设置开机密码无效怎么办
  5. 对逻辑回归损失函数进行求导
  6. java executenonquery_ExecuteNonQuery()返回值
  7. 解决安装QT后MSVC2015 64bit配置无编译器和调试器问题
  8. 全球顶级创投布局中国SDN市场 云杉网络完成千万美元B轮融资
  9. c语言符号函数怎么表示,C语言中的数学符号怎么表示?
  10. 电脑突然变成绿屏错误代码无法使用怎么办?