The Python Debugger Pdb
Python Debugger
pdb
The Python Debugger Pdb
可以直接在命令行中启动,调试程序
也可以写在代码中
命令行使用
可以直接在命令行指定要进行调试的程序
python -m pdb my_test.py
之后会显示当前代码执行的位置
通过输入命令进行操作
命令
命令 | 作用 |
---|---|
h(elp) | 帮助 |
w(here) | 打印当前堆栈 |
d(own)[count] | 执行跳转到当前堆栈的深 [count] 层,默认为 1 |
u(p) | 执行跳转到当前堆栈的上 [count] 层,默认为 1 |
b(reak)[ ([filename:]lineno | function) [, condition] ] |
不加参数:列出所有断点; 指定行号:(可以指定其他文件的一行) 在当前行添加断点; 指定函数:在函数的第一个可执行语句添加断点; 指定条件:当条件语句满足时断点生效 |
tbreak[ ([filename:]lineno | function) [, condition] ] | 临时断点,生效一次后自动删除,使用方法同 b(reak) |
cl(ear) |
不加参数:清除所有断点; 指定行号:(可以指定其他文件的一行) 清除当前行断点; 指定断点号:清除此断点 |
disable bpnumber [bpnumber ...] | 停用断点 |
enable bpnumber [bpnumber ...] | 激活断点 |
condition bpnumber [condition] | 为此断点设定条件 |
s(tep) | 执行下一条命令,如果是函数调用,就执行到调用函数的第一句(会进入到调用的函数内部) |
n(ext) | 执行下一条语句,如果是函数调用,就执行函数,之后执行下一条语句(不会进入调用的函数内部) |
unt(il) [lineno] | 不带参数的情况下,继续执行,直到到达行号大于当前行的行号为止。使用[lineno],继续执行直到行号大于或等于[lineno]。 |
r(eturn) | 继续执行,直至当前函数 return |
retval | 打印函数最后一次的返回值 |
run [args...] | 重新启动程序,相当于restart |
c(ont(inue)) | 继续执行,直至遇到断点 |
l(ist) |
列出当前语句周围 11 行的源码。 如果有一个参数,列出该行号周围 11 行的源码。 如果有两个参数,列出区间内的源码。 如果有两个参数,且后面的小,前面的参数为行号,后面参数为列出源码的行数。 |
longlist | ll | 列出当前函数的全部源码 |
a(rgs) | 列出当前函数的所有参数 |
whatis arg | 打印参数类型 |
p expression | 输出 expression 的值 |
pp expression | 好看一点地输出 expression 的值 |
q(uit) exit | 退出 debugger 停止执行语句 |
set_trace
set_trace() 是最常用的断点方式,放置在代码中,程序会停在断点处,输入命令 c
继续运行
示例:
import pdb
def main(i):
for i in range(i):
pdb.set_trace()
print(i)
if __name__ == '__main__':
main(10)
输出:
> /dir/test.py(7)main()
-> print(i)
(Pdb)
表示执行到 /dir/test.py
的第 7 行,main()
函数中,语句为 print(i)
breakpoint()
Python 3 中加入了内置函数 breakpoint()
可以直接调用 pdb,相当于 pdb.set_trace()
run & runeval
会在当前位置打断点,接下来会执行字符串类型的表达式
用法
run(cmd, globals=None, locals=None) 会对传入的参数执行 exec()
runeval(expr, globals=None, locals=None) 会对传入的参数执行 eval()
如果不传入参数,则默认使用全局变量(__main__.dict
)
如果要传入参数就要将全部参数以字典形式传入,使用没有传入的参数会报错
The Python Debugger Pdb的更多相关文章
- The python debugger(PDB)的简介
转自:http://www.cnblogs.com/wei-li/archive/2012/05/02/2479082.html 学习Python调试,最好的资料当然是官方文档和(pdb)help了, ...
- gdb可以调试python的pdb么
1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...
- Python 调试 PDB
出处:http://blog.163.com/gjx0619@126/blog/static/12740839320114995947700/ 完整 请参考:http://docs.python.or ...
- python 用pdb调试
简单调试 Python 程序 在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): $ vi d.py ...
- python调试工具pdb
pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令 简写命令 作用 break b 设置断点 continue c 继续执行程序 list l 查看当前行的代码段 step ...
- Python 之pdb调试
# 调试方式一:python -m pdb test.py # 相关命令: # l 查看当前代码 # n 向下执行一行代码 # c continue继续执行代码 # b break + 行数 添加断点 ...
- 学习笔记之Python调试 - pdb
python调试神器——pdb - 软谋python https://mp.weixin.qq.com/s/w3Xw8I_zh7MFq2dx5kdQXw 优秀开发者必备技能包:Python调试器 - ...
- python使用 pdb 进行调试--- python -m pdb xxx.py 即可 和gdb使用一样
使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变 ...
- [Python] Debugger in Pycharm
From: http://blog.csdn.net/u013088062/article/details/50214459 From: http://blog.csdn.net/u013088062 ...
随机推荐
- 201871010113-刘兴瑞《面向对象程序设计(java)》第十四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- vue中is的使用
:is作用 1.动态切换不同组件 <div id="app"> <button @click="changeComponent('component1' ...
- Windows10 安装grpc-go 详细步骤
准备依赖 git clone https://github.com/grpc/grpc-go.git $env:GOPATH\src\google.golang.org\grpc git clone ...
- spring cloud 2.x版本 Gateway自定义过滤器教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- 大话设计模式Python实现-中介者模式
中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互. 下面是一个中介者模式的demo ...
- JAVA 网络编程 - 实现 群聊 程序
在实现 这个 程序之前, 我们 需要 了解 一些 关于 Java 网络 编程 的 知识. 基本 的 网络知识: 网络模型 OSI (Open System Interconnection 开放系统互连 ...
- PHPStorm使用PHP7新特性出现红色波浪错误
今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的 ...
- Spring Cloud Alibaba基础教程:Sentinel Dashboard同步Apollo存储规则
在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时,在文末的思考中,我都指出了这两套整合方案都存在一个不足之处:不论采用什么配置中心,限流规则都只能 ...
- 投色子--html demo
这是之前客户想要看的一个效果,不知道放在博客里面有没有关系,当做备份吧. <!DOCTYPE HTML> <html> <head> <meta charse ...
- 全栈工程师对Python面试中is和==区别的详细解说!看完真的学到了!
面试实习生的时候,当问到 is 和 == 的区别时,很多同学都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致.本文我们来看一下这两者的区别. 我们先来看几个例子: a = "hel ...