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 ...
随机推荐
- a迭代中的燃尽图统计
简单分析:项目一直在跟进,进展较缓,临近迭代结束,项目进度突飞猛进.
- rsync的简介及使用
1.rsync的基础概述 1.什么是备份 相当于给源文件增加一个副本,但是备份只会备份当前状态的数据,当你在写数据是,不会备份新写入的数据,除非自己手动在备份一次. 2.为什么要做备份 1.需要备份一 ...
- Noip刷题计划
写在前面 去年也想刷10年NOIP来着..结果刷到13年就没动力了233... 今年一定要完成目标啊!! "愿你明日重生,醒时心存冬阳" 2018年 题目 首次得分 出错原因 考点 ...
- python做中学(一)全局变量的用法
一段时间没有使用python来写代码,就发现以前学习的很多语法都忘了.看来还是当初这方面的项目做的好不够多,没有系统性的运用和学习,导致了很多语法不能顺手拈来.在接下来的这个项目中, 一定要把遇到的一 ...
- spring cloud 2.x版本 Gateway熔断、限流教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- PHP面试常考之设计模式——建造者模式
建造者模式 介绍 建造者模式又名生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 建造者模式是一步一步创建 ...
- NRF51822/NRF51802/NRF52832/NRF52810/NRF52811/NRF52840内核对比
NRF51822的内核为M0,FLASH是256K,RAM是16K,蓝牙BLE4.0/4.2(SDK新版本支持4.2)NRF51802的内核为M0,FLASH是256K,RAM是16K,蓝牙BLE4. ...
- [07]ASP.NET Core 进程外(out-of-process)托管
ASP.NET Core 进程外(out-of-process)托管 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从 ...
- C#判断dataGridView1 点击的是哪一列上的按钮
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { ) { DataGr ...
- C#测试对比不同类型的方法调用的性能
一. 测试方法调用形式 1. 实例方法调用 2. 静态方法调用 3. 实例方法反射调用 4. 委托方法的Invoke调用 5. 委托方法的DynamicInvoke调用 6.委托方法的BeginInv ...