python调试之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的更多相关文章
- python 调试模式pdb(转)
标准库的pdb pdb是Python自带的一个库,为Python程序提供了一种交互式的源代码调试功能,包含了现代调试器应有的功能,包括设置断点.单步调试.查看源码.查看程序堆栈等.如果读者具有C或C+ ...
- Python 调试器之pdb
使用PDB的方式有两种: 1. 单步执行代码,通过命令 python -m pdb xxx.py 启动脚本,进入单步执行模式 pdb命令行: 1)进入命令行Debug模式,python -m pdb ...
- Python调试器-pdb的使用
[简介] pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx.py #可以直接进入单步执行模式 2 ...
- 学习笔记之Python调试 - pdb
python调试神器——pdb - 软谋python https://mp.weixin.qq.com/s/w3Xw8I_zh7MFq2dx5kdQXw 优秀开发者必备技能包:Python调试器 - ...
- win10下正确使用Sublime Text搭建python调试环境
pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 ...
- Python 调试 PDB
出处:http://blog.163.com/gjx0619@126/blog/static/12740839320114995947700/ 完整 请参考:http://docs.python.or ...
- 如何用pdb进行python调试
本文章讲述了如何用pdb进行python调试讲解. 当手边 没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试) 参 考:http://docs.python.org/l ...
- $PDB——Python调试利器详解
python 2.7 pdb官方文档:https://docs.python.org/2.7/library/pdb.html pdb是ptyhon内置的一个调试库,是调试python代码的好帮手,本 ...
- python调试总结
调试通常采用两种方式,打印日志调试以及运行时实时跟踪调试. 一.打印日志: 1. print不要看不起print,这是一切调试的起点,即便是调试Java或者C这种巨麻烦的编译语言,print仍然是常用 ...
随机推荐
- 动手写 js 沙箱
本文由云+社区发表 作者:ivweb villainthr 市面上现在流行两种沙箱模式,一种是使用iframe,还有一种是直接在页面上使用new Function + eval进行执行. 殊途同归,主 ...
- IIS安装以及发布
控制面板-所有控制面板项-程序和功能-打开或关闭windows功能-Internet 信息服务,里面全部打钩点击确实.安装完成. 控制面板-管理工具-Internet 信息服务管理器-双击打开 ...
- 算法题:实现一个IP白名单过滤器
最近看到一则招聘的JD,附了一个算法题的链接,原题如下: 请实现一个IP白名单过滤算法,实现以下接口 boolean addWhiteIpAddress(String ip); boolean ...
- 配置多版本jdk
配置办法https://blog.csdn.net/qq342643414/article/details/78364601 可能会遇到的问题https://www.cnblogs.com/chuij ...
- python函数练习题
- CSS文本属性 文本阴影text-shadow 换行 text-overflow
div{ font-size: 20px; text-shadow: 5px 5px 5px #333; text-shadow: 10px 10px ...
- SAP MM A工厂下的PR可以转成B工厂下的PO?
SAP MM A工厂下的PR可以转成B工厂下的PO? 答案是可能的,这也是SAP标准行为之一. 如下图采购申请单据, PR中的Plant是GENL.该PR 已经转成了PO,如上图. 看这个PO,工厂代 ...
- Android-蓝牙的网络共享与连接分析
一.概述 本次分析是基于android7.0的源码,主要是介绍如何通过反射来打开蓝牙的网络共享以及互联网的连接. 二.蓝牙的网络共享 1. 网络共享部分源码分析 关于packages/apps/Set ...
- vue环境搭建及项目介绍
搭建开发环境(搭建开发环境前必须安装node.js): 1.安装vue脚手架工具 $ npm install -g vue-cli 2.创建项目(注意项目名字不要有大写字母) vue init < ...
- 【English】十三、英语中的连词有哪些,都有什么作用
一.什么是连词 参考:https://m.hujiang.com/en_cixing/yylc/ 连词是一种虚词,用于连接单词.短语.从句或句子,在句子中不单独用作句子成分. 连词按其性质可分为并列连 ...