pdb,交互式的python程序源码调试工具,支持断点,单步调试等,总之,python程序的调试,用它就够了
我的调试方法
在进入现在的公司前,我还使用eclipse来编写软件,遇到比较复杂或者奇怪的问题时,一般可以在eclipse中设置断点,运行源码就可以调试了
进入现在的公司,一开始也是使用eclipse编码的,但在实际工作中,有时一个问题会跨越几个服务(项目),eclipse的调试功能貌似不再能够满足我的需求,从同事处得知,可以使用pdb进行调试,使用方法:在需要设置断点的代码行前面添加下面的代码
import pdb
pdb.set_trace()
程序运行到此等待你的指挥,另外还得知一个不错的IDE,pycharm我的另外一篇博客也有专门推荐过《使用IDE编写python代码》,自然而然的就更换了调试方式和IDE
pdb交互环境长啥样
编写如下的代码:
def see_hello(name):
print("Hello, %s" % name)
def how_are_you():
print("How are you?")
import pdb
pdb.set_trace()
if __name__ == "__main__":
see_hello("anys")
how_are_you()
在命令行敲入python test.py
,会出现如下的界面:
这就是pdb的交互界面了,停在了pdb.set_trace()的下一行,接下来呢?敲入help
,如下:
看不懂了吧?反正我是靠猜的
pdb命令列表
命令每次 | 解释 | 示例 |
---|---|---|
h(elp) [command] | 查看帮助,不带任何参数时列出pdb全部的命令列表,如果带一个命令名称则输出该命令的帮助信息 | h;h cl |
w(here) | 打印堆栈跟踪 | w |
d(own) | 当前堆栈深入一层 | d |
u(p) | 当前堆栈往上一层 | u |
b(reak) [[filename:]lineno | function[, condition]] | 设置断点,可以指定某个文件的某行或者某个函数设置断点,不带任何参数时则列出当前全部的断点(仅通过b xx创建) | b see_hello;b 16 |
tbreak [[filename:]lineno | function[, condition]] | 临时断点,参考b(reak) | tb sello |
cl(ear) [filename:lineno | bpnumber [bpnumber …]] | 清理断点 | cl 16 |
disable [bpnumber [bpnumber …]] | 禁用断点 | disable 1 |
enable [bpnumber [bpnumber …]] | 与disable相反 | enable 1 |
ignore bpnumber [count] | 忽略count次,如果count为非0,则每次执行到断点处count减1,count为0时停住 | ignore 1 2 |
condition bpnumber [condition] | 设置断点的条件,只有满足条件时才会停住 | condition 1 x>0 |
commands [bpnumber] | 为断点设置一系列的命令,输入end结束 | commands 1 |
s(tep) | 执行当前行,停在函数调用或者函数调用的下一行参数 | s |
n(ext) | 执行到下一行或者到return | n |
unt(il) | xxx | xxx |
r(eturn) | 执行到当前函数返回 | r |
c(ont(inue)) | 执行到下一个断点时停住 | c |
j(ump) lineno | 跳转到lineno继续执行 | j 16 |
l(ist) [first[, last]] | 列出指定范围内的源码 | l |
a(rgs) | 打印当前函数的全部参数 | a |
p expression | 打印表达式的值 | p x+y |
alias [name [command]] | 给命令起个别名 | alias u until |
unalias name | 取消别名 | unalias u |
q(uit) | 退出 | q |
下面是几个例子: