视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
pythonpdb调试方法分享
2020-11-27 14:38:49 责编:小采
文档


代码如下:


import pdb

def pdb_test(arg):
for i in range(arg):
print(i)
return arg

pdb.run("pdb_test(3)")

b 函数名、行号:

打断点,b可以查询所有的断点。

代码如下:


(Pdb) b pdb_test
Breakpoint 1 at c:\users\plpcc\desktop\pdbtest.py:3
(Pdb) b
Num Type Disp Enb Where
breakpoint keep yes at c:\users\plpcc\desktop\pdbtest.py:3

c:

运行程序,直到遇到断点。

代码如下:


(Pdb) c
> c:\users\plpcc\desktop\pdbtest.py(4)pdb_test()
-> for i in range(arg):

l:

查看断点周围的代码

代码如下:


(Pdb) l
import pdb

B def pdb_test(arg):
-> for i in range(arg):
print(i)
return arg

pdb.run("pdb_test(3)")

a:

查看参数

代码如下:


(Pdb) a
arg = 3

s, n:


单步运行,区别s会进入路径中的函数,n不会进入

p:

查看表达式的值

代码如下:


(Pdb) p i

condition:

条件断点,只有条件为true断点才命中

代码如下:


> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)
(Pdb) l
import pdb

def pdb_test(arg):
for i in range(arg):
B-> print(i)
return arg

pdb.run("pdb_test(3)")
[EOF]
(Pdb) b
Num Type Disp Enb Where
breakpoint keep yes at c:\users\plpcc\desktop\pdbtest.py:5
(Pdb) condition 2 i==1 //i==1时才触发断点2
New condition set for breakpoint 2.
(Pdb) b
Num Type Disp Enb Where
breakpoint keep yes at c:\users\plpcc\desktop\pdbtest.py:5
stop only if i==1
(Pdb) c
//i==0直接打印未断住
> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i) //触发断点,i==1
(Pdb) p i

bt:

查看调用堆栈

代码如下:


(Pdb) bt
c:\python33\lib\bdb.py(405)run()
-> exec(cmd, globals, locals)
(1)()
> c:\users\plpcc\desktop\pdbtest.py(5)pdb_test()
-> print(i)
r:


执行到函数返回

代码如下:


(Pdb) r

--Return--
> c:\users\plpcc\desktop\pdbtest.py(6)pdb_test()->3 //代码位置、函数返回值->3
-> return arg //代码位置的语句
(Pdb) l
import pdb

def pdb_test(arg):
for i in range(arg):
print(i)
-> return arg

pdb.run("pdb_test(3)")

通过pdb.set_trace() 在代码中指定位置嵌入一个断点,通常可以通过调试开关来控制

代码如下:


import pdb

__DEBUG__ = True

def pdb_test(arg):
if True == __DEBUG__:
pdb.set_trace()
for i in range(arg):
print(i)
return arg

pdb_test(3)

运行后在pdb.set_trace()位置被断住,当__DEBUG__ = False,代码正常运行

代码如下:


> c:\users\plpcc\desktop\pdbtest.py(8)pdb_test()
-> for i in range(arg):
(Pdb) l
__DEBUG__ = True

def pdb_test(arg):
if True == __DEBUG__:
pdb.set_trace()
-> for i in range(arg):
print(i)
return arg

pdb_test(3)
[EOF]

通过pdb.pm()进行事后调试,可以跟踪异常程序最后的堆载信息:

代码如下:


Traceback (most recent call last):
File "C:\Users\plpcc\Desktop\pdbTest.py", line 13, in
pdb_test(3)
File "C:\Users\plpcc\Desktop\pdbTest.py", line 10, in pdb_test
1/0
ZeroDivisionError: division by zero
>>> import pdb
>>> pdb.pm()
> c:\users\plpcc\desktop\pdbtest.py(10)pdb_test()
-> 1/0
(Pdb) l
def pdb_test(arg):
if True == __DEBUG__:
pdb.set_trace()
for i in range(arg):
print(i)
-> 1/0
return arg

pdb_test(3)

下载本文
显示全文
专题