当前位置: 首页 > article >正文

python内置的调试工具-pdb

最近写python代码,当代码逻辑复杂时,总是要检查是否正确运行。但是光用print显得较为麻烦,在网上找到了内置的调试工具pdb,使用起来比print要舒服,因此特来总结一下pdb的使用。

pdb有两种使用方法:

  • 非侵入式(不需要额外修改源代码,在命令行下直接运行即可调试):

    python -m pdb filename.py
    
  • 侵入式(在调试代码中添加一行代码,之后在正常运行)

    import pdb
    pdb.set_trace()
    
    python filename.py
    

当命令行前面出现(pdb)时,就表示调试工具pdb启动成功。

在这里插入图片描述

当前所在位置会用->进行标注,表示即将访问该行代码

查看源码

l:查看当前位置前后11行源代码。

在这里插入图片描述

l:查看全部源代码。

在这里插入图片描述

设置断点

b:添加断点

  • b line_num:在line_num处添加断点
  • b filename:line_num:在filename文件的line_num行添加断点
  • b function_name:在function_name处添加断点

tbreak:添加临时断点(执行一次后自动删除)

cl:清除断点

  • cl filename:line_num
  • cl bp_number1 .. bp_number_n:清除1-n的断点序号
非逐行调试命令

c:持续执行下去,直到遇到一个断点

unt line_num:持续执行直到到达指定行或遇到断点。

j:直接跳转到指定行(被跳过的代码不执行

until 命令用于跳过代码,直到到达指定的行号。但是,如果你指定的行号小于当前行号,PDB 会报错。

jump 命令用于跳转到指定的行号,但它有一些限制:

  • 你只能跳转到当前代码块内的行号。
  • 你不能跳转到比当前行号更早的行号(即不能倒退)。
逐行调试命令

s:执行下一行,可以进入函数体

n:执行下一行,不会进行函数体

r:执行下一行。若在函数内则会直接执行到函数返回处

打印变量

p var1 .. var_n:打印变量值。

打印变量类型

whatis var

启动交互式解释器

interact

退出交互模式:

  • Linux/MacCtrl + D
  • Windows: Ctrl + Z
退出pdb

q

修改变量

已存在值进行修改:!var = new_var

未存在值设置:var = var_value

将调试的输入输出信息进行保存

pdb调试可以在终端上很容易就看到调试的信息,但是在分析的时候可能由于对调试信息有缺漏导致判断错误。因此可以将调试的输入输出不仅展示在终端上,还进行保存,方便进一步检查。

{使用pdb进行调试的指令} | tee debug.log

tee 是一个在 Unix/Linux 系统中常用的工具,可以将命令的输出同时保存到文件和终端。结合 tee,可以将 PDB 的交互式输入和输出全部保存到日志文件中。

(base) PS E:\Graduate\ML_PDE\ML> python .\lab.py | tee debug.log
> e:\graduate\ml_pde\ml\lab.py(4)<module>()
-> a = [1,3,3,4,5,6,7,8,9,10]
unt 15
(Pdb) > e:\graduate\ml_pde\ml\lab.py(15)<module>()
-> main(a)
p a,b
(Pdb) ([1, 3, 3, 4, 5, 6, 7, 8, 9, 10], array([[0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.],
       [0.]]))
whatis a
(Pdb) <class 'list'>
whatis b
(Pdb) <class 'numpy.ndarray'>
q
Traceback (most recent call last):
  File "E:\Graduate\ML_PDE\ML\lab.py", line 15, in <module>
    main(a)
  File "E:\Graduate\ML_PDE\ML\lab.py", line 15, in <module>
    main(a)
  File "E:\Anacoda_store\lib\bdb.py", line 90, in trace_dispatch
    return self.dispatch_line(frame)
  File "E:\Anacoda_store\lib\bdb.py", line 115, in dispatch_line
    if self.quitting: raise BdbQuit
bdb.BdbQuit
(Pdb) 

在这里插入图片描述

10分钟教程掌握Python调试器pdb - 知乎 (zhihu.com)


http://www.kler.cn/a/515553.html

相关文章:

  • 【深度学习基础】多层感知机 | 权重衰减
  • Picsart美易照片编辑器和视频编辑器
  • 【前端】CSS实战之音乐播放器
  • 线性表-线性存储结构
  • STM32更新程序OTA
  • 【数据结构】二分查找
  • 解决SpringBoot项目启动错误:找不到或无法加载主类
  • 一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk
  • 【玩转全栈】----基于ModelForm完成用户管理页面
  • 作品显示ip属地与定位哪个是真实的
  • 解决因JDK升级导致的`java.nio.file.NoSuchFileException`问题
  • 【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
  • Python并发编程 07 事件驱动模型、进程切换、进程阻塞、文件描述符、缓存I/O、selectors模块
  • Vue3+Element Plus 实现 el-table 表格组件滚动是否触底监听判断
  • 父级perspective与子元素transform:perspective的区别
  • 在vue3中使用datav完整引入时卡在加载页面的解决方法
  • 【10.2】队列-设计循环队列
  • FFmpeg音视频采集
  • 数据结构——实验二·栈
  • 2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总
  • 【2024年华为OD机试】 (E卷,100分) - 整数编码(JavaScriptJava PythonC/C++)
  • 4.C++中的循环语句
  • 【Mac】Python相关知识经验
  • 什么是网络爬虫?Python爬虫到底怎么学?
  • TDengine 与上海电气工业互联网平台完成兼容性认证
  • PySide6的简单介绍