自学内容网 自学内容网

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)


原文地址:https://blog.csdn.net/qq_63432403/article/details/145298867

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!