python中断点调试模块pdb从入门到实战

python模块简介

在使用jupyter book、ipyhton或执行命令行时,通常会遇到调试很不方便的情况。还好Python有自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的

pdb模块使用的三种方式

1. 命令行模式
     命令行启动目标程序,加上-m参数,这样调用myscript.py的话,断点就是程序的执行第一行之前,常见操作如下

python -m pdb myscript.py
- 输入next运行到下一行
- 输入list显示下面11行代码
- 输入p打印变量
- 输入quit结束调试

2. 在Python交互环境中启用调试

import pdb
import mymodule

pdb.run("mymodule.test()")

3. 程序内部插入断点
比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面**打上断点(pdb.set_trace()后一行)**然后启动debug,不过这种方式是hardcode的,适合于用在IDE不好直接调试的情况

if __name__ == "__main__":
    a = 1
    import pdb
    pdb.set_trace()
    b = 2
    c = a + b
    print(c)

pdb模块的常用参数

在进入pdb调试环境时,可以同过help命令查看所有pdb模块的所有命令,也可以通过help [command]命令查看具体命令的用法简介

  1. EOF      文件结束标识
  2. a(args)      打印当前函数的所有参数
  3. alias      alias [name [command [parameter parameter ...] ]]
         alias      查看所有别名
         alias name      查看别名name
         alias name command [parameter parameter …]      定义别名name
             eg.alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])
  4. b(break)      查看、添加断点
b 列出当前所有断点,和断点执行到统计次数
b line_no:当前脚本的line_no行添加断点
b filename:line_no:脚本filename的line_no行添加断点
b function:在函数function的第一条可执行语句处添加断点
  1. bt(w/where)      打印当前执行堆栈
  2. c(cont[inue])      执行到下一个断点
  3. cl(clear)      清除断点
cl 清除所有断点
cl bpnumber1 bpnumber2... 清除断点号为bpnumber1,bpnumber2...的断点
cl lineno 清除当前脚本lineno行的断点
cl filename:line_no 清除脚本filename的line_no行的断点
  1. commands      断点处添加命令
  2. condition      设置条件断点,当boolean为True时,条件断点生效      condition bpnumber boolean
  3. debug      重启debug,相当于restart
  4. disable      禁用断点,可以恢复
  5. display [expression]      有参数表达式时,显示表达式的值;无参数时,显示所有display过的值
  6. d(down) [count]      执行跳转到在当前堆栈的深一层(个人没觉得有什么用处)
  7. enable      恢复断点
  8. exit      退出调试,程序中止
  9. h(help) [command]      查询命令帮助,无参数时,列出所有pdb命令
  10. ignore bpnumber [count]      忽略断点count次,默认为0,每执行一次,count减1
  11. interact      开启一个全局解释器,其全局命名空间包含当前范围的(全局与局部)的名称
  12. j(jump) lineno      设置下条执行的语句函数,只能在堆栈的最底层跳转,向后重新执行,向前可直接执行到行号
  13. l(list) [first [,last] | .]      显示当前行后面的代码,默认显示11行;参数为first时,显示first后面11行;参数为.时,当前行前后分别显示11行;当参数为first, last时,从first行显示到last行,如果first > last时,在first后显示last数量行
  14. ll(longlist)      显示当前函数或代码块的所有代码
  15. n(next)      执行当前行,光标跳转到下一行
  16. p(pp) expression      打印表达式的值,pp会格式化打印的结果,与display的区别是:display会把表达式也打印出来,但p与pp只打印结果
  17. q(quit)      停止debug,程序运行中止
  18. r(return)      继续运行函数,一直到return语句
  19. restart(run) [args…]      重启当前调试的程序
  20. rv(retval)      打印函数最后一次返回的值
  21. s(step)      运行到下一行,当前行为函数的调用,进行到函数定义的第一行
  22. source expression      获取expression(module, class, method, function, traceback, frame, or code object)的源码
  23. tbreak[ ([filename:]lineno | function) [, condition] ]      设置临时断点或临时条件断点(只第一次生效)
  24. u(up) [count]      运行当前代码块到上面一级,默认count=1,即运行到函数调用处
  25. unalias name      删除别名
  26. undisplay [expression]      不再显示expression,默认不显示所有的expression
  27. unt(until) [lineno]      一直执行到行号处,默认运行到return处
  28. whatis arg      打印arg的变量类型

猜你喜欢

转载自blog.csdn.net/xiaowang352798/article/details/85466818
今日推荐