ipdb是ipthon配套的debug工具。

进入ipdb模式的方法:

1、入侵式:
在代码文件头”import ipdb”
然后在代码中加上ipdb.set_trace()就可以设置断点。
2、非入侵式
命令:

ipython -m ipdb test.py

h(help)查看所有的调试命令
h <调试命令> 查看调试命令的作用的作用

下面是命令详解

b(reak)

  • b 查看所有断点的状态
  • b <lineno> 在代码的第lineno行设置断点
  • b <filename>:<lineno> 会在某个文件(filename)的对应行(lineno)添加断点
  • b <functionname> 会在某个函数(functionname)的第一行设置断点

另外还有tbreak命令,与break基本相同,但是被执行一次后自动被清除

cl(ear)

cl(ear) filename:lineno
cl(ear) [bpnumber [bpnumber…]] With a space separated list of breakpoint numbers, clear those breakpoints. Without argument, clear all breaks (but first ask confirmation). With a filename:lineno argument, clear all breaks at that line in that file.

使用的时候,先查看(b),再删除(cl)

ipdb> b
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at d:\hexo\source\code\test.py:4
        breakpoint already hit 1 time
2   breakpoint   keep yes   at d:\hexo\source\code\test.py:1
ipdb> cl 1 2
Deleted breakpoint 1 at d:\hexo\source\code\test.py:4
Deleted breakpoint 2 at d:\hexo\source\code\test.py:1

clear后的断点不可以恢复
如果需要恢复应该使用 disable和enable,用法和clear相同

执行控制:

  • c(otinue) 执行到下一个断点(断点这句不会执行)
  • n(ext) 单步执行,遇到函数不会跳入
  • s(tep) 单步执行,遇到函数会跳入
  • r(eture) 执行到 return语句
  • j(ump) lineno 去执行第lineno行(感觉像是goto一样)

查看命令

可以直接输入变量名直接查看变量的值
如果变量名和pdb命令重复,需要在前面加一个!

推荐使用display来查看变量。
display variable 监视variable的值
display的变量在每步调试之后都会显示其值
如果取消display,需要使用undisplay命令

其他类的查看命令:
l:查看当前块的11行代码(一般是前5行以及后5行)
ll: 查看当前块的全部代码
w: 当前执行代码的位置

interact

进入交互式解释器中对当前内存中的数据进行各种操作。
在 interact 状态下修改内存中的数据并不会对程序产生实质的影响,所有修改在退出 interact 状态后将被清除。
(相当于开辟了一个新的函数,你可以任意操作,但不会改变形参的值)

ipdb> interact
*interactive*
In : d = a +1
In : print(d)
2    
In :

ctrl + Z退出interact模式