对于python程序的debug,python安装的时候一般有自带的pdb工具,pdb是专门用来调试python程序的工具,可以通过在命令行直接调用,方式为:python -m pdb script.py,其中script.py为要调试的脚本名称,运行命令后,便会进入pdb调试环境,然后用相应的pdb命令进行调试即可。或者也可以导入标准库pdb,在需要设置断点的地方写上pdb.set_trace()即可。
python还有一个IPython下的调式工具ipdb,可以认为其是pdb的一个加强版,功能更完善,体验更佳,具有和pdb几乎一样的命令和接口;其也是很多python IDE内置的标准的python调试工具,比如anaconda自带的IDE。本文将简单介绍一下ipdb的用法和常用命令。
一、ipdb的用法
对于有图形用户界面的IDE,如果其默认的debug工具就是ipdb,那么直接进行相应的debug操作就行,当然,不同的IDE进入debug的过程可能略有区别,读者自行查询一下即可;有时候,我们是直接在非图形用户界面下进行debug,比如在linux环境下,我们想直接利用ipdb进行debug的话,可以通过ipdb这个包来让程序进入ipdb环境。当然由于其不是标准库中的包,需要先进行安装,然后再程序中只需要导入这个包,并通过ipdb.set_trace()语句放在代码需要的地方,然后程序运行到这里就会自动进入ipdb环境,相当于设置了断点,在运行到断点的时候,程序会自动的进入ipdb环境,然后再利用相应的ipdb命令进行debug即可。
二、ipdb常用命令介绍
进入ipdb环境后,可以通过help命令显示所有的ipdb命令。
对于每个命令,可以通过help comd的方式来查看命令comd的具体含义。下面对一些常用的命令做一些介绍:
b(reak): 设置断点,可以通过break linenum的方式在第linenum行设置一个断点,直接输入b回车会显示所有断点;
c(ontinue): 继续执行到下一个断点,如果没有断点,执行到程序结束;
cl(ear): 清除断点,通过cl linenum的方式清除指定行的断点,没有参数则清除所有断点;
j(ump): 通过j linenum命令,表示跳过中间的语句直接执行第linenum行;
l(l): 查看当前的代码;
longlist: 查看当前更多的代码块;
n(ext): 运行程序下一行(不会进入函数,和s(tep)做区分);
p(p): 通过p expression的方式打印显示某个表达式的结果;
q(uit): 退出ipdb环境;
s(tep): 和n类似,区别在于,s当运行到某一个函数的时候,其会进入这个函数中;
当进入这个函数,还有如下命令:
a(rgs): 显示函数的参数列表;
r(eturn): 执行直到函数返回为止。
最后还可以按回车表示重复上一次的ipdb命令。