吉吉于

【Python】pdb调试

启动方式

pdb有三种方式:

1.

命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前

 python -m pdb xxx.py

╭─@Flowerowl.local ~/z/pj/pylink
╰─ python -m pdb main.py 1 ↵

/Users/Flowerowl/z/pj/pylink/main.py(3)() -> import model.urlQuence as urlQuence

2.

在Python交互环境中启用调试

import pdb

import module

pdb.run(‘module.test()’)

3.

比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug

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

然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了

pdb常用命令

q
退出debug

h 即help,打印所有可以命令

h w
打印命令 w 的含意

n
执行当前行直到到达下一行或直到它返回

s
执行当前行,一有可能就停止(比如当前行有一个函数调用)。它和n(next)的区别是当前行中有函数调用时s(step)会停止当前行的执行而去调用那个函数,而n不会停止,直到计算完成这一行(到达下一行)。

b(reak) [[filename:]lineno | function[, condition]]
设置断点,可以是行号或函数。如 b 10, b foo, b foo,n == 5,最后在函数foo()入口处设置一个断点,但仅当n的值是5时才有效。当b命令无参数时,打印所有断点。

tb(reak) [[filename:]lineno | function[, condition]]
临时断点,只hit一次。

disable [bpnumber [bpnumber …]]
使指点行的断点(们)失效

enable [bpnumber [bpnumber …]]
使指定行上的断点(们)有效

c
继续执行程序,直到遇到下一个断点

w
即where,打印当前执行点的位置

l [first, [,last]]
输出当前行附近的源码

p expression
执行一个表达式当打印其值。

a(rgs)
打印当前函数的参数及其值

<直接回车> 重复执行上次的命令 并遇到pdb不认识的命令时,会将它当成python表达式执行。如果你想执行的表达时,最前面加上 `!` 字符,比如 `!n == 5` 多个debug命令可以写在一行上,中间用两个分号分隔,如 `s;;s`。 restart 重新执行debug 转载请注明:[于哲的博客][1] » [【Python】pdb调试][2] [1]: http://lazynight.me [2]: http://lazynight.me/3225.html