关于python pdb的描述_轻松理解python中的debugger-pdb

Python中实用的 Python debugger-pdb

前言

今天笔记一下刚学一个的实用的Python debugger,个人觉得算是非常实用的,它让你更容易的去除错,甚至还可以在debug的同时,打一些代码来作一些自己想做的测试.以下将透过一些简单的例子来介绍相关指令集的使用.官方文档 : pdb — The Python Debugger

pdb介绍

以下先举一个简单的例子,并将这段代码之档案名称命为pdb_debugger.py

import pdb

def add(a,b):

pass

pdb.set_trace()

c = add(3,5)

上面这个pdb.set_trace()的意思就是代码执行到这一行的时候会停下来,如果这时候我们到终端机打执行 python3 pdb_debugger.py 此时此刻会在终端机出现:

-> c = add(3,5)

这边需要特别注意到的是,他显示的东西并不是已经执行完这行代码,而是即将执行这行代码, 在上面这行的下方会有一个:

(Pdb)

这个介面就是可以让你输入相关的指令集,有了这个概念后,先简单的列出并叙述一些常用的指令集:

l 将被执行该档案之代码陈列出来,具体他会显示多少我没有去研究

w 显示下一段将执行的代码,可以帮助了解你现在代码执行到哪了

n 即执行的代码,如上述说明终端上显示的(或输入w)会出现即将执行的代码

s 这个功能主要针对函式除错使用,下面将进行说明

r 将执行完现有的函式

b 设置终断点

c 持续执行直到下一个终断点,如果没有终断点,则执行到整个代码结束为止.

实例

这边开始由浅入深开始介绍上述的指令集:

1. 指令 s 以及 n的区别:

import pdb

def add(a,b):

c = 0

for i in range(a) :

c+=(i*b)

return c

pdb.set_trace()

c = add(3,5)

執行代碼後 :

(Pdb)

如果输入n : 会直接执行完函式 add(a,b)**这行代码,也就是说没办法进如函数里面除错.

如果输入s : 会进入该函式 add(a,b)**,并且等待下一个命令.

2. 指令 r 的介紹:

假设现在我们输入了s进入了函数后,如果此时输入指令r,代码会直接一直跑到该函数的末行,这边我个人认为可以理解为在函数的末行设置了一个终段点,也就是这行 :

return c

接着只要输入n那就完成函数的执行了!

3. 指令 c 以及 b

上述简单的解释已提及c就是持续执行,那么如果我们希望c到某一段后,就先暂停的话可以怎么做?例如:

def add(a,b):

c = 0

for i in range(a) :

c+=(i*b)

return c

pdb.set_trace()

c = add(3,5)

//

100多行代碼

//

d = add(c,5)

上述这个例子中,如果我们现在确定可能会出现问题的代码在c = add(3,5)和d = add(c,5) ,中间的100多行代码都是没问题的,那如果使用指令n的话,要按100多下…这边我们可以配合指令c和指令b的使用,上述提到指令c会使其不断执行到下一个终断点为止,要加入一个终断点,那么我们可以使用:

(Pdb) b 15

这边代表在代码的第15行设置另一个终断点,至于怎么知道我们想设的终断点在哪一行,可以透过指令l 指令来查询,查询到相对应的行数后,将其加在b后面即可.

4 指令 interact

个人觉得最厉害的就是这个功能了,这个功能可以让我们在除错的同时,他给了另一个介面来打让我们敲代码,也就是可以自己做一些小测试.个人觉得这个在写一些张量的操作的时候,这个功能可以很快速的让我们去追踪某一个张量现在的状态:

def add(a,b):

x = np.random.randint(0,100,(4,5))

c = 0

for i in range(a) :

c+=(i*b)

return c

pdb.set_trace()

c = add(3,5)

当我们开始执行代码的时候,首先使用指令s,进入到add(a,b)后,紧接着经过两次n之后,此时已经执行完了 :

x = np.random.randint(0,100,(4,5))

这个时候假设我们想知道x的一些资讯,我们可以透过指令interact来操作,此时他会吐一个介面给你,你可以在里面自由发挥,比如可以试试x>3,他会即时的返回资讯给你,如果想回到除错的介面,执行ctrl+d即可跳出.

總結

这是一个很棒的工具,上述的东西应该很够可以让你更轻松地除错了,如果有看不懂的地方,这边建议实际去实作看看,应该能马上了解,我也是第一天学,可能有一些东西也没说明正确,如果哪边说错了,大家可以在下方流言指证我!感谢你的阅读.

原文链接:https://blog.csdn.net/weixin_44010927/article/details/106564767

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值