赞
踩
ipdb(IPython debugger), 与 pdb 类似, 是一款集成了 IPython 的 Python 代码命令行调试工具,支持 Tab 键补全,语法高亮等。
文章目录
ipdb 是 Python 的第三方库,使用 pip 即可安装
pip install ipdb
1、集成到代码中
在调试位置插入断点即可。
- x = 1
- import ipdb; ipdb.set_trace();
- y = 2
程序会在执行完 x = 1
这条语句之后停下来, 并展开 IPython 环境, 此时就可以进行调试了。
当程序运行到ipdb.set_trace()的地方会自动进入debug模式。
- for i in range(5):
-
- print(i)
-
- ipdb.set_trace()
2、命令式
将 ipdb 集成到代码中很方便,但是也有不灵活的缺点。对于一段比较棘手的代码,我们可能需要按步执行,边运行边跟踪代码流并进行调试,这时候使用交互式的命令式调试方法更加有效。启动 ipdb 调试环境的方法也很简单:
python -m ipdb your_code.py
- c:继续执行代码,直到遇到下一个断点或程序结束。
- n:单步执行下一行代码(不会进入函数内部)。
- s:单步进入下一行代码(如果有函数调用,则进入函数内部)。
- q:退出调试器并终止程序的执行。
- l:查看当前位置附近的代码。
- p:打印变量的值,例如p variable_name。
- h:查看帮助信息,例如h command_name。
- w:查看当前的调用栈。
- u:向上移动一层调用栈。
- d:向下移动一层调用栈。
1、帮助
使用 h
即可调出 ipdb 的帮助。可以使用 help command 的方法查询特定命令的具体用法。
执行下一条语句
使用 n
(next) 执行下一条语句。
注意: 一个函数调用也是一个语句。
2、进入函数内部
使用 s
(step into) 进入函数调用的内部。
3、断点标注
使用 b line_number
(break) 的方式给指定的行号位置加上断点。使用 b file_name:line_number
的方法给指定的文件(还没执行到的代码可能在外部文件中)中指定行号位置打上断点。
4、继续执行到下一个断点处
使用 c
(continue) 执行代码到下一个断点处或将程序执行完毕。
5、继续执行直到返回
使用 r
(return) 执行代码直到当前所在的这个函数返回。
6、跳过某段代码
使用 j line_number
(jump)可以跳过某段代码,直接执行指定行号所在的代码。
7、更多的上下文
在 ipdb 调试环境中,默认只显示当前执行的代码行,以及其上下各一行的代码。如果想要看到更多的上下文代码,可以使用 l first[, second]
(list)命令。
其中 first 指向上最多显示的行号,second 指向下最多显示的行号(可以省略)。当 second 小于 first 时,second 指的是从 first 开始的向下的行数(相对值 vs 绝对值)。
8、位置信息
有时我们可能会忘了自己目前所在的行号。例如在打印了若干变量值后,屏幕完全被这些值占据。使用 w
或者 where
可以打印出目前所在的行号位置以及上下文信息。
9、变量类别
可以使用 whatis variable_name
的方法,查看变量的类别。
10、列出当前函数的全部参数
当调试到一个函数内部的时候,可以使用 a
(argument) 打印出传入函数的所有参数的值。
11、打印
使用 p
(print) 和 pp
(pretty print) 可以打印表达式的值。
12、清除断点
使用 cl
或者 clear file:line_number
清除断点。如果没有参数,则清除所有断点。
13、重启
使用 restart
重新启动调试器,断点等信息都会保留。restart 实际是 run 的别名,使用 run args
的方式传入参数。
14、退出
使用 q
退出调试,并清除所有信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。