一、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. 点击菜单选项,右侧主体区新增子界面(Tab)的实现

    今天是2019年小年后一天,还有三天回家过年. 今天记录一下一种前端页面的效果的实现,这种效果很常见,一般用于网站后台系统的前端页面.一般后台系统会分为顶部导航栏,左边的菜单栏和右边的主体区.有一种效 ...

  2. C# WebRequest.Create 锚点“#”字符问题

    背景 在与后台API接口对接时,如将网页Url作为参数请求数据时,如果是锚点参数,则会丢失. 锚点参数 请求通过WebRequest.Create创建一个WebRequest: var uri = & ...

  3. weblogic patch log显示

    如何在WebLogic 12.1.3 版本的 server log 中显示 opatch 的补丁信息? 打补丁  patch 23558563 之后. 需要在 JAVA_OPTIONS 中添加如下参数 ...

  4. ArcPy 重命名拷贝删除图层

    使用Python脚本进行图层的重命名拷贝及删除,并在过程中利用logging进行日志记录. 附上Python代码: # -*- coding: utf-8 -*- # nightroad import ...

  5. kali权限提升之本地提权

    kali权限提升之本地提权 系统账号之间权限隔离 操作系统的安全基础 用户空间 内核空间 系统账号: 用户账号登陆时候获取权限令牌 服务账号无需用户登录已在后台启动服务 windows用户全权限划分: ...

  6. maven生成项目慢解决办法

    maven生成项目慢,原因:在线更新archetype-catalog.xml文件,从Apache中央仓库. 解决办法,手动下载,放到maven环境. 备用下载地址: https://files.cn ...

  7. anki server 错误与解决

    anki 客户端 转载请注明出处 :http://www.cnblogs.com/qq-757617012/ 1.无法同步 是否突然停电,导致程序损坏(提示被防火墙或杀毒软件阻止)     anki客 ...

  8. 光盘安装win7系统教程

    光盘安装系统是最传统的安装系统的方法,虽然现在U盘安装和硬盘安装已经很方便,但仍有很多用户习惯光盘安装的方式,下面小编教大家如何利用光盘安装系统. 来源:https://www.haoxitongx. ...

  9. 周一02.4变量&垃圾回收机制

    一.变量 1. 什么是变量 量:记录事物的某种状态,即事物典型的特征 变:事物的状态是可以发生变化的 2. 为何要用变量 是为了让计算机能够像人一样记录事物的状态 3. 如何用变量 (先定义后引用) ...

  10. June. 26th 2018, Week 26th. Tuesday

    No affection but interests can be found in the world of animals. 在动物的世界里,只有利益,没有感情. From Animal Worl ...