Python控制台调试模式:IPDB
Python可直接在终端进行DEBUG调试:IPDB
IPDB
前一段时间刚接触到这个, 之前 DEBUG
还停留在 IDE
层面… 原来还可以这么玩…
IPDB
是什么?IPDB
(Ipython Debugger),和 GDB
类似,是一款集成了 Ipython
的 Python
代码命令行调试工具,可以看做 PDB
的升级版
那么 PDB
是什么? - Python Debugger
推荐直接使用: IPDB
毕竟是增强版: 支持Tab补全; 支持语法高亮; 支持 iPython
基础用法
有2种方式启用 pdb
一种是代码里导入 pdb
模块; 一种是命令行启用;
懒人当然选第二种(不用改代码): python3 -m ipdb myscript.py
默认是按行执行的, 按 回车
或者 n
执行下一行
常用的命令:
h
快捷的帮助文档l
展示更多的源码b 10
给第10行设置断点c
进入下一个设置的断点p
打印变量值s
进入函数r
跳出函数q
退出
ipdb> h
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
ipdb> h c
c(ont(inue))
Continue execution, only stop when a breakpoint is encountered.
PDB 命令表
常用的命令一般都是一个字母的简写, 使用完成的命令也是可以的
整理的命令表(Python3): 参考:pdb-document
h(elp)
- 默认展示全部命令列表!!!h b
设置断点的文档!!! 会这个, 其他的就简单了w(here)
- 打印堆栈信息d(own)
- Move the current frame count (default one) levels down in the stack trace (to a newer frame)u(p)
- Move the current frame count (default one) levels up in the stack trace (to an older frame)b(reak) [([filename:]lineno | function) [, condition]]
- 断点- 不带参数时列出所有断点信息
- 行号 - 给指定的行设置断点
- 函数名 - 给指定函数设置断点
- 文件名:行号 - 给指定文件名的某行设置断点 (此文件可能还没引人)
- 如果有第二个参数, 则条件结果为
True
时设置断点
tbreak [([filename:]lineno | function) [, condition]]
- 临时断点- 参数和
break
一样; 第一次命中断点后自动删除
- 参数和
cl(ear) [filename:lineno | bpnumber [bpnumber ...]]
- 清除断点- 不带参数时, 清除所有断点(会先提示先确认)
- 文件:行号 - 清理指定文件对应行号的断点
- 断点号1 断点号2 … - 清理指定编号的断点; 断点编号列表可以使用
b
查看
disable [bpnumber [bpnumber ...]]
- 禁用断点, 不是删除; 后面可以重新开启enable [bpnumber [bpnumber ...]]
- 启用禁用的断点ignore bpnumber [count]
- 断点忽略断点次数, 直到次数为0时, 断点才会生效; 功效应该和几次disable
后再enable
一样condition bpnumber [condition]
- 给指定编号的断点设置条件- 没有条件参数时 - 去掉断点上面已有的条件
- 有条件参数是 - 设置新的条件, 当条件值为
True
时, 断点才会生效
commands [bpnumber]
- 给断点设置命令列表- 删除断点所有命令, 只需要输入
commands
后立即输入end
即可 - 没有 断点编号 参数时, 默认为最后一个断点
- 删除断点所有命令, 只需要输入
s(tep)
- 进入当前行对应的函数里n(ext)
- 下一步unt(il) [lineno]
- 正常执行直到某一行为止; 有点像临时断点, 有什么区别么?r(eturn)
- 跳出当前方法函数c(ont(inue))
- 继续执行, 知道碰到断点j(ump) lineno
- 直接跳转到某行执行, 中间跳过的代码不会执行!!!l(ist) [first[, last]]
- 展示当前行邻近的源代码;l 10,20
展示第10到20行代码ll | longlist
- 展示本文件所有代码a(rgs)
- 打印当前函数的参数列表, 以及对于参数的值p expression
- 打印当前 表达式 的值; 比如变量等pp expression
- 带格式化的打印 表达式 的值whatis expression
- 打印 表达式 的类型source expression
- 尝试获取 表达式 的源码display [expression]
- 显示 表达式 的值; 如表达式的值有变动, 那么就会实时打印结果, 动态跟踪undisplay [expression]
- 取消 表达式 的显示interact
- 启动一个交互式解释器alias [name [command]]
- 给命令起别名, 具体还是看文档吧unalias name
- 取消别名run | restart [args ...]
- 重启启动调试- 之前的操作, 断点, 设置选项都将保留
restart
是run
的别名;
q(uit)
- 退出调试模式
如果不全的话, 请直接参考: h pinfo
形式
参考:
blog comments powered by Disqus