一、PDB调试命令

pdb调试命令
完整命令 简写命令 描述
args a 列出当前函数的参数
break b <行号> 在某一行设置断点
break b <文件名>:<行号> 在某个文件的某行打一点断点
break b <函数名> 在某个含税的第一行打一个断点
clear cl 清除所有断点
clear cl n1 n2 清除编号为n1、n2的断点
condition 设置条件断点
disable 禁用断点
enable 启用断点
help h 查看pdb帮助
next n 执行下一条语句,遇到函数不进入其内部
step s 执行下一条语句,遇到函数会进入其内部
continue c或者cont 执行到下一个断点
ignore 忽略断点
jump j 跳转到指定行数运行
list l 列出源码(前后11行代码)
list l <行号> 列出某行周围11行代码(即这一行为中间行,列出它上下各5行)
list l <行号1> <行号2> 列出两个行号范围内的代码
p p 打印变量值,也可以用print
pp pp 好看一点的输出
quit q 退出 pdb
return r 一直运行到函数返回
tbreak 设置临时断点,断点只中断一次
where w 打印当前执行堆栈(查看所在的位置)
! 在pdb中执行语句

二、关键命令

1.断点设置
(Pdb) b 10 # 断点设置在本py的第10行
(Pdb) b test.py:20 # 断点设置到 test.py第20行 2.删除断点
(Pdb) b # 查看断点编号
(Pdb) cl 2 # 删除第2个断点 3.运行
(Pdb) n # 单步运行
(Pdb) s # 细点运行 也就是遇到函数、方法会进入里面
(Pdb) c # 跳到下个断点 4.查看
(Pdb) p param # 查看当前 变量值
(Pdb) l # 查看运行到某处代码
(Pdb) a # 查看全部栈内变量 5.打印变量
(Pdb)p param # 如果变量是个复杂的对象,可以先打印查看变量的属性,然后查看变量的某个属性值 (Pdb)p dir(param) (Pdb)p param.xxx  

三、调试示例

1、示例1

1.代码示例
import pdb
s1 = 'aaa'
pdb.set_trace()
s2 = 'bbb'
s3 = 'ccc'
pdb.set_trace()
s = s1 + s2 + s3
print(s) 可以看到上面代码使用pdb.set_trace()函数打了两个断点(第4、7行) 2.开始调试
执行上面代码就进入了调试状态:
> d:\projects\pythonprojects\3.25pdb\test.py(4)<module>()
-> s2 = 'bbb' # -> 表示执行到了这里,但是还没有真正执行,因此此时的s2仍未被赋值
(Pdb) 可以看出直接执行到了第一个断点所在的下一行,并停在了这里。
这时可以执行命令: n 进行下一步:
(Pdb) n
> d:\projects\pythonprojects\3.25pdb\test.py(5)<module>()
-> s3 = 'ccc' # -> 表示执行到了这里,但是还没有真正执行,因此此时的s3仍未被赋值,但前面的代码都执行了
(Pdb) 使用 p <变量名> 命令打印已经出现过的变量的值:
(Pdb) p s1
'aaa'
(Pdb) p s2
'bbb'
(Pdb) p s3
*** NameError: name 's3' is not defined
(Pdb)
因为当前变量s3还没有被赋值,所以打印s3的时候提示 NameError 异常。 使用 l 命令打印出当前的代码段:
(Pdb) l
1 import pdb
2 s1 = 'aaa'
3 pdb.set_trace()
4 s2 = 'bbb'
5 -> s3 = 'ccc'
6 pdb.set_trace()
7 s = s1 + s2 + s3
8 print(s) 退出调试: q 命令
Traceback (most recent call last):
File "D:/Projects/PythonProjects/3.25pdb/test.py", line 5, in <module>
s3 = 'ccc'
File "D:/Projects/PythonProjects/3.25pdb/test.py", line 5, in <module>
s3 = 'ccc'
File "C:\Python\Python36\lib\bdb.py", line 51, in trace_dispatch
return self.dispatch_line(frame)
File "C:\Python\Python36\lib\bdb.py", line 70, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit

2、示例2

QuickStart中使用的调试方式不够优雅,因为是通过修改代码的方式打断点的,用起来不太方便。
那么下面我们使用动态打断点的方式进行调试

1.代码示例
s1 = 'aaa'
s2 = 'bbb'
s3 = 'ccc'
s = s1 + s2 + s3
print(s) 2.开始调试
1,在终端输入命令执行脚本文件:python -m pdb test2.py
> d:\projects\pythonprojects\3.25pdb\test2.py(1)<module>()
-> s1 = 'aaa'
(Pdb) l
1 -> s1 = 'aaa'
2 s2 = 'bbb'
3 s3 = 'ccc'
4 s = s1 + s2 + s3
5 print(s)
[EOF] 2,可以看到当前代码中我们还没有打任何断点,代码默认停在了第1行。
执行一个命令 n :
(Pdb) n
> d:\projects\pythonprojects\3.25pdb\test2.py(2)<module>()
-> s2 = 'bbb'
(Pdb) l
1 s1 = 'aaa'
2 -> s2 = 'bbb'
3 s3 = 'ccc'
4 s = s1 + s2 + s3
5 print(s)
[EOF]
可以看到单步执行到了下一行。 3,如果我们想在第4行打一个断点,用 b <行号> 命令在某一行打一个断点:
(Pdb) b 4
Breakpoint 1 at d:\projects\pythonprojects\3.25pdb\test2.py:4
(Pdb) n
> d:\projects\pythonprojects\3.25pdb\test2.py(3)<module>()
-> s3 = 'ccc'
(Pdb) l
1 s1 = 'aaa'
2 s2 = 'bbb'
3 -> s3 = 'ccc'
4 B s = s1 + s2 + s3
5 print(s)
[EOF] 这样就成功地在第4行打了一个断点。 4,查看当前打了哪些断点: b 命令
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at d:\projects\pythonprojects\3.25pdb\test2.py:4

四、补充

在命令行中进入调试模式的方法: python -m pdb demo.py
在调试模式中按一下 Enter 键表示执行一下上一条命令。

python调试之pdb的更多相关文章

  1. python 调试模式pdb(转)

    标准库的pdb pdb是Python自带的一个库,为Python程序提供了一种交互式的源代码调试功能,包含了现代调试器应有的功能,包括设置断点.单步调试.查看源码.查看程序堆栈等.如果读者具有C或C+ ...

  2. Python 调试器之pdb

    使用PDB的方式有两种: 1. 单步执行代码,通过命令 python -m pdb xxx.py 启动脚本,进入单步执行模式 pdb命令行: 1)进入命令行Debug模式,python -m pdb ...

  3. Python调试器-pdb的使用

    [简介] pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx.py #可以直接进入单步执行模式 2 ...

  4. 学习笔记之Python调试 - pdb

    python调试神器——pdb - 软谋python https://mp.weixin.qq.com/s/w3Xw8I_zh7MFq2dx5kdQXw 优秀开发者必备技能包:Python调试器 - ...

  5. win10下正确使用Sublime Text搭建python调试环境

      pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 ...

  6. Python 调试 PDB

    出处:http://blog.163.com/gjx0619@126/blog/static/12740839320114995947700/ 完整 请参考:http://docs.python.or ...

  7. 如何用pdb进行python调试

    本文章讲述了如何用pdb进行python调试讲解. 当手边 没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试) 参 考:http://docs.python.org/l ...

  8. $PDB——Python调试利器详解

    python 2.7 pdb官方文档:https://docs.python.org/2.7/library/pdb.html pdb是ptyhon内置的一个调试库,是调试python代码的好帮手,本 ...

  9. python调试总结

    调试通常采用两种方式,打印日志调试以及运行时实时跟踪调试. 一.打印日志: 1. print不要看不起print,这是一切调试的起点,即便是调试Java或者C这种巨麻烦的编译语言,print仍然是常用 ...

随机推荐

  1. .NET ClrProfiler ILRewrite 商业级APM原理

    Demo:https://github.com/caozhiyuan/ClrProfiler.Trace 背景 为了实现自动.无依赖地跟踪分析应用程序性能(达到商业级APM效果),作者希望能动态修改应 ...

  2. SLAM+语音机器人DIY系列:(三)感知与大脑——4.音响麦克风与摄像头

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  3. (摘)C#生成随机数的三种方法

    随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当 ...

  4. Vmware安装CentOs7+gitlab(一)

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...

  5. 前端零基础 --css转换--skew斜切变形 transfor 3d

    前端零基础 --css转换--skew斜切变形 transfor 3d==============重要不紧急! 重要紧急 重要不紧急 不重要紧急 不重要不紧急

  6. MyDAL - .UpdateAsync() 之 .Set() 使用

    索引: 目录索引 一.API 列表 1.Set<M, F>(Expression<Func<M, F>> propertyFunc, F newVal) 如: .S ...

  7. C#语言中的修饰符

    public:公有访问.不受任何限制. private:私有访问.只限于本类成员访问,子类和实例都不能访问. protected:保护访问.只限于本类和子类访问,实例不能访问. internal:内部 ...

  8. Apache kylin概览

    一.Apache kylin的核心概念 表(Table ):表定义在hive中,是数据立方体(Data cube)的数据源,在build cube 之前,必须同步在 kylin中. 模型(model) ...

  9. windows docker redis

    拉取docker docker pull hub.c.163.com/library/redis:latest 启动docker docker run -p 6379:6379 -d hub.c.16 ...

  10. JAVA EE获取浏览器和操作系统信息

    一.原理说明:  1. 浏览器访问服务端时,Http请求头上会带上客户端一些信息,可通过"user-agent"获取. //java获取方法如下,其他语言也有自己获取方法 Stri ...