如何使用pdb启动调试python程序_使用Pdb调试Python程序

pdb是Python标准库自带的一个模块,可以用来调试程序。

麦新杰调试从来都是使用print,不过,有的时候遇到比较诡异的问题,使用高级一点的工具还是更方便一些。Python的pdb正好填补这个地方,而且pdb还是标准库里面的模块,随时都可以用。

麦新杰不是很喜欢直接在源代码中插入pdb.set_trace()的方式启动pdb,这样会破坏源代码的美感。最好是在模块中设置一个启动函数,然后在python运行窗口直接使用如下方式进入pdb调试:

>>>

>>> import pdb

>>> pdb.run('za.testList()')

> (1)()->None

(Pdb) s

--Call--

> d:\onlinepro\za.py(262)testList()

-> def testList(LL=[]): # can not be LL=[:]

(Pdb)

s是step命令的简写,表示进入函数;

n是next命令的简写,表示下一步,如果在上面的运行过程中,我们首先使用n的话,函数直接就当成一行语句,执行完毕了,没法调试。所以,我们上面看到的是使用s,进入函数,开始我们的调试。

h是help的简写,列出所有可以使用的pdb指令,如下:

>>> import pdb

>>> pdb.run('za.testList()')

> (1)()->None

(Pdb) s

--Call--

> d:\onlinepro\za.py(262)testList()

-> def testList(LL=[]): # can not be LL=[:]

(Pdb) h

Documented commands (type help ):

========================================

EOF c d h list q rv undisplay

a cl debug help ll quit s unt

alias clear disable ignore longlist r source until

args commands display interact n restart step up

b condition down j next return tbreak w

break cont enable jump p retval u whatis

bt continue exit l pp run unalias where

Miscellaneous help topics:

==========================

pdb exec

(Pdb)

常用的除了s,n,还有c,表示continue执行到断点处,如果没有设置断点,直接就执行完毕。

使用l或者ll来显示源代码(l显示的少,ll显示的多一些),源代码对应的行号会显示出来,行号用来设置断点,使用b命令。

(Pdb) l

268 del LL[0] # delete the first element of the list

269 #del LL

270 print(id(LL))

271

272 aa = [2,7,5,9,1,2,6]

273 bb = sorted(aa)

274 cc = sorted(aa, reverse=True)

275 print(aa)

276 print(bb)

277 print(cc)

278 aa.sort()

(Pdb) b 276

Breakpoint 3 at d:\onlinepro\za.py:276

(Pdb) cl

Clear all breaks? y

Deleted breakpoint 3 at d:\onlinepro\za.py:276

(Pdb)

使用cl命令来清楚所有断点。

使用p命令来打印变量的值:

(Pdb) l

272 aa = [2,7,5,9,1,2,6]

273 bb = sorted(aa)

274 cc = sorted(aa, reverse=True)

275 print(aa)

276 B print(bb)

277 -> print(cc)

278 aa.sort()

279 print(aa)

280

281 #ww = input('what do you want:') # input a string

282 #print('You want:', ww, type(ww))

(Pdb) p aa

[2, 7, 5, 9, 1, 2, 6]

(Pdb) p bb

[1, 2, 2, 5, 6, 7, 9]

(Pdb) p cc

[9, 7, 6, 5, 2, 2, 1]

(Pdb)

常用的就是这些命令,pdb有一个特点,如果直接回车,将会默认再次执行上一个指令,比如刚使用了n下一步,这时不再输入n,直接回车,等同于输入n回车。

Python的pdb也有一些局限:不能远程调试,不能调多线程。(没见过远程调试,多线程就直接print)

2017-08-25:

直接在理解程序的基础上,使用print打印就能够debug,简单但是效率可能稍差一点。

补充一个细节:Python print函数遇到非引号内的逗号(,)会自动打印出一个空格。这是人性化呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值