python调试模块ipdb详解
作者:mingqian_chu 时间:2021-11-05 19:59:01
1. 调试python
ipdb是用来python中用以交互式debug的模块,可以直接利用pip安装;
其功能类似于pycharm中python控制台,
而使用ipdb 的优点,便是直接在代码中调试,
避免了在python控制台,或者重新设置一些简单变量。
pip install ipdb
1.1 使用ipdb
当程序运行到ipdb.set_trace()的地方会自动进入debug模式。
for i in range(5):
print(i)
ipdb.set_trace()
1.2 常用命令
n→ \to→next
ENTER→ \to→重复上次命令
q→ \to→退出
p<变量>→ \to→打印变量
c→ \to→继续
l→ \to→查找当前位于哪里
s→ \to→进入子程序
r→ \to→运行直到子程序结束
————————————————
命令式
上面的方法很方便,但是也有不灵活的缺点。对于一段比较棘手的代码,我们可能需要按步执行,边运行边跟踪代码流并进行调试,这时候使用交互式的命令式调试方法更加有效。启动IPDB调试环境的方法也很简单:
python -m ipdb your_code.py
常用命令
IPDB调试环境提供的常见命令有:
帮助
使用h即可调出IPDB的帮助。可以使用help command的方法查询特定命令的具体用法。
下一条语句
使用n(next)执行下一条语句。注意一个函数调用也是一个语句。如何能够实现类似“进入函数内部”的功能呢?
进入函数内部
使用s(step into)进入函数调用的内部。
打断点
使用b line_number(break)的方式给指定的行号位置加上断点。使用b file_name:line_number的方法给指定的文件(还没执行到的代码可能在外部文件中)中指定行号位置打上断点。
另外,打断点还支持指定条件下进入,可以查询帮助文档。
一直执行直到遇到下一个断点
使用c(continue)执行代码直到遇到某个断点或程序执行完毕。
一直执行直到返回
使用r(return)执行代码直到当前所在的这个函数返回。
跳过某段代码
使用j line_number(jump)可以跳过某段代码,直接执行指定行号所在的代码。
更多上下文
在IPDB调试环境中,默认只显示当前执行的代码行,以及其上下各一行的代码。如果想要看到更多的上下文代码,可以使用l first[, second](list)命令。
其中first指示向上最多显示的行号,second指示向下最多显示的行号(可以省略)。当second小于first时,second指的是从first开始的向下的行数(相对值vs绝对值)。
根据SO上的这个问题,你还可以修改IPDB的源码,一劳永逸地改变上下文的行数。
我在哪里
调试兴起,可能你会忘了自己目前所在的行号。例如在打印了若干变量值后,屏幕完全被这些值占据。使用w或者where可以打印出目前所在的行号位置以及上下文信息。
这是啥
我们可以使用whatis variable_name的方法,查看变量的类别(感觉有点鸡肋,用type也可以办到)。
列出当前函数的全部参数
当你身处一个函数内部的时候,可以使用a(argument)打印出传入函数的所有参数的值。
打印
使用p(print)和pp(pretty print)可以打印表达式的值。
清除断点
使用cl或者clear file:line_number清除断点。如果没有参数,则清除所有断点。
再来一次
使用restart重新启动调试器,断点等信息都会保留。restart实际是run的别名,使用run args的方式传入参数。
退出
使用q退出调试,并清除所有信息。
当然,这并不是IPDB的全部。其他的命令还请参照帮助文档。文档在手,天下我有!
来源:https://blog.csdn.net/chumingqian/article/details/129464323
标签:python,调试,ipdb
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Bowman vs Google-设计与数据彼此相互需要
2009-08-16 16:06:00
python记录程序运行时间的三种方法
2023-08-25 03:12:19
Python基于正则表达式实现计算器功能
2021-08-17 13:00:02
python进程管理工具supervisor使用实例
2022-08-24 13:47:03
![](https://img.aspxhome.com/file/2023/8/75228_0s.png)
mysql 导入导出数据
2011-02-23 12:27:00
iframe框架用JavaScript子页面控制父页面
2009-01-19 13:43:00
如何拒绝同一张表单被多次提交?
2009-12-16 18:46:00
python中的class_static的@classmethod的巧妙用法
2022-07-18 15:54:43
PHP中的MYSQL常用函数
2010-09-30 14:49:00
ORACLE 10g 安装教程[图文]
2009-05-24 19:12:00
![](https://img.aspxhome.com/file/UploadPic/20095/26/200952620153777.jpg)
pytorch安装及环境配置的完整过程
2023-06-19 23:53:20
![](https://img.aspxhome.com/file/2023/9/61199_0s.png)
PaddleNLP ppdiffusers 自动生成兔了个兔海报
2023-07-20 01:56:39
![](https://img.aspxhome.com/file/2023/6/63226_0s.png)
边框样式的写法总结
2009-01-18 13:00:00
python读取与写入csv格式文件的示例代码
2023-08-09 09:07:15
python连接sql server乱码的解决方法
2023-06-27 07:25:17
SQL Server正则表达式 替换函数应用详解
2023-07-07 23:53:13
python科学计算之numpy——ufunc函数用法
2023-05-13 15:13:12
![](https://img.aspxhome.com/file/2023/8/70828_0s.jpg)
Laravel实现登录跳转功能
2023-06-14 23:35:40
![](https://img.aspxhome.com/file/2023/9/55549_0s.png)
使用MyISAM表和InnoDB的一些记录
2009-12-20 18:21:00
Python matplotlib如何简单绘制不同类型的表格
2021-10-16 12:23:48
![](https://img.aspxhome.com/file/2023/7/75887_0s.png)