一、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. js数组去重排序(封装方法)

    <script type="text/javascript"> // arr代表数组,index代表下标 function lihua(arr, index){ arr ...

  2. Dynamics 365中极特殊语言的文字搜索结果异常

    微软动态CRM专家罗勇 ,回复316或者20190314可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 有些比较少见的问题, ...

  3. 我的世界 ParaCraft 结合开源地图 OpenStreetMap 生成3D校园的方法简介

    我的世界ParaCraft结合开源地图OpenStreetMap生成3D校园的方法简介 版本1.0 日期2019.2.3 作者Ray (82735589@qq.com) www.TimeGIS.com ...

  4. Java 基本文件操作

    Java 文件操作 , 这也是基于Java API 操作来实现的. 文件是操作系统管理外存数据管理的基本单位, 几乎所有的操作系统都有文件管理机制. 所谓文件, 是具有符号名而且在逻辑上具有完整意义的 ...

  5. java学习入门之---使用idea创建第一个maven项目

    一.准备条件: 1.安装idea旗舰版 2.安装tomcat 二.打开idea开始创建 1.创建Project 2.选择项目类型为maven 3.输入组名和项目名 ---> 下一步 ----&g ...

  6. python学习——读取染色体长度(五:从命令行输入染色体长度)

    # 传递命令行参数 # 导入sys模块 import sys print(sys.argv)   命令行操作 python argv.py 10 20 30 40 50 回车输出 ['argv.py' ...

  7. Mysql原理与优化

    原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c1 ...

  8. C# 中利用 CRC32 值判断文件是否重复

    需要在 NuGet 中引用 Crc32.NET 包 直接贴代码了: using Force.Crc32; using System; using System.Collections.Generic; ...

  9. 【转】HTTP请求中的form data和request payload的区别

    jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的,比如用$.ajax方法发送请求时(data参数是一个JSON.stringify()处理后的字符串, ...

  10. 2013年山东省赛F题 Mountain Subsequences

    2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从 ...