内容简介:授人以鱼不如授人以渔,掌握调试方法是学习提升的一个必备条件。前几天因为探索了一下 Python 模块引入路径的问题,看到「翔 Core」用 pdb 调试的很溜,因此,今天研究一下 ipdb好啦。ipdb 是 pdb 模块的升级版,会启动一个 ipython 的调试窗口。
授人以鱼不如授人以渔,掌握调试方法是学习提升的一个必备条件。前几天因为探索了一下 Python 模块引入路径的问题,看到「翔 Core」用 pdb 调试的很溜,因此,今天研究一下 ipdb好啦。
安装
ipdb 是 pdb 模块的升级版,会启动一个 ipython 的调试窗口。
pip install ipdb
使用
python -m ipdb demo.py import ipdb;ipdb.set_trace()
帮助文档
在 ipdb 窗口,输入 h ,会看到帮助文档, h <command> 可以查看具体命令的帮助。
Documented commands (type help <topic>): ======================================== EOF cl disable interact next psource rv unt a clear display j p q s until alias commands down jump pdef quit source up args condition enable l pdoc r step w b cont exit list pfile restart tbreak whatis break continue h ll pinfo return u where bt d help longlist pinfo2 retval unalias c debug ignore n pp run undisplay Miscellaneous help topics: ========================== exec pdb
常用命令
-
a(rgs):打印当前函数的参数列表 ★★★ -
b(reak) [ ([filename:]lineno | function) [, condition] ]:设置断点,可以接行数或者行数名作为参数,比如,b 8就是在第8行打断点,还可以给外部的文件加上断点b file_name:line_number,如果只敲b,会显示全部断点 -
c(ont(inue)):继续执行,当遇到断点时才会停止 ★★★ -
cl(ear) filename:lineno:可以清除断点,不过不加「断点号」,可以清除所有断点 -
disable bpnumber [bpnumber ...]:禁用指定[断点号]的断点 -
enable bpnumber [bpnumber ...]:启用指定[断点号]的断点 -
Enter:重复上次命令 ★★★ -
j(ump):设置下一步执行的行,这个语句可以让你跳过某些语句的执行,并不是网上一些文章说的跳到某行,跳到某行可不是代表会跳过某些语句的,文档最准确 -
llorl:查看当前将要运行的代码段 -
n(ext):让程序运行下一行,如果当前语句有一个函数调用,用 n 是不会进入被调用的函数体中的 ★★★ -
pp expressionorp expression:前者以 pprint 方式打印表达式的值,后者 print 方式 ★★★ -
q(uit):退出调试,同时,你也可以使用Ctrl+D退出调试 -
r(eturn):继续执行,直到当前函数返回 ★★★ -
restart "restart" is an alias for "run".:是run命令的别名,重新启动调试器; -
run [args...]:这里的参数会作为运行脚本的参数,等价于python demo.py [args...],可以通过sys.argv查看参数列表,重新运行时,断点等信息会保留的 -
s(tep):和 n 相似,但是如果当前有一个函数调用,s 会进入被调用的函数体中 ★★★ -
w(here):打印一个堆栈跟踪, -
!:感叹号后面跟着语句,可以直接改变某个变量的值
示例
断点示例
下面是一个关于断点的示例:
执行 b 7 、 b 12 之后,输入 ll 查看,最左侧的 1、2 就是断点号,输入 c ,下次运行到断点处,执行就会停下来。
ipdb> ll
----> 1 a = 'michael'
2 print(a)
3
4 def hello(name):
5 print('hello')
6 for i in range(5):
1 7 print(i)
8 print(name)
9
10
11 hello('michael')
2 12 x = 10
13 y = 20
执行 disable 1 ,下次执行到「断点1」处,就不会停下来了,输入 b 可以查看全部断点:
ipdb> b Num Type Disp Enb Where 1 breakpoint keep no at /Users/michael/Code/00-Temp/b.py:7 2 breakpoint keep yes at /Users/michael/Code/00-Temp/b.py:12
如果想清除「断点2」,那么执行 cl 2 即可:
ipdb> cl 2 Deleted breakpoint 2 at /Users/michael/Code/00-Temp/b.py:12
run 示例
ipdb> run --name michael
Restarting b.py with arguments:
--name michael
> /Users/michael/Code/00-Temp/b.py(1)<module>()
----> 1 a = 'michael'
2 print(a)
3
ipdb> import sys
ipdb> sys.argv
['b.py', '--name', 'michael']
看到上面的结果,确实等价于 python b.py --name michael 。
注意点
在 ipdb 调试窗口,虽然可以随时给变量赋值,但是要注意变量的名字和 ipdb 的命令不能重复了,否则会出错,可以用 !b=123 来规避这个问题。
最后
学完这个 ipdb 的调试,再回头看看 Pycharm 的 debug 功能,貌似都能理解了!
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 如何使用VS Code调试Node.js C++ Addon 模块
- iOS常用调试方法:断点调试
- 断点调试和日志调试之间的平衡点:函数计算调试之 Python 篇
- .NET高级调试系列-Windbg调试入门篇
- VisualStudio 通过外部调试方法快速调试库代码
- GDB 调试 Mysql 实战(二)GDB 调试打印
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Caching
Duane Wessels / O'Reilly Media, Inc. / 2001-6 / 39.95美元
On the World Wide Web, speed and efficiency are vital. Users have little patience for slow web pages, while network administrators want to make the most of their available bandwidth. A properly design......一起来看看 《Web Caching》 这本书的介绍吧!