「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」当习惯用pycharm调试python代码的时候,遇到命令行执行代码,该怎么调试跟踪遇到的错误呢,python有跟调试c语言gdb一样的pdb
基础
参考链接:官方文档docs.python.org/zh-cn/3/lib…
pdb 模块定义了一个交互式源代码调试器,用于 Python 程序。它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上下文中运行任意 Python 代码。它也支持在命令行进行事后调试。调试器的提示符是Pdb
使用
1 命令行使用
前提你已经安装了pdb包: pip install pdb 我们先创建一个简单的python文件test.py,敲几行简单代码
a = 1
b = 2
c = a + b
print(c)
在命令行窗口执行如下命令:python -m pdb .\test.py
我是在VScode的terminal执行, 这个terminal默认使用的是windows的power shell,所以在截图中你会看到PS,当然你也可以使用其他的终端,windows自带的cmd窗口, git bash等
这个时候,我没有设置任何断点,默认断点是程序执行的第一行,我们再试一下, 修改test.py文件
保存,重新以pdb调试执行这个test, 看程序停在了文件的第一行
2. pdb的命令
pdb 当然像gdb一样有很多命令,它有多少命令我们可以在pdb调试符后输入help来查看,也可以输入h,如图所示
详细介绍一下常用的命令
我们实际使用一下部分命令
- h command 根据帮助信息可以看到,exit和quit命令是等价的,都可以退出pdb
2. b lineno
打断点
- c 执行,遇到断点停止
剩下的可以自己有兴趣去尝试
2 在代码中使用
先看一个例子,修改这个test.py, 然后正常执行
可以看到,我们在代码的头部引用了pdb模块, 并使用pdb的方法set_trace设置了断点,当执行这个程序的时候, 程序就进入的debug模式,并停在了断点处,接着你就可以使用pdb的各种命令来调试你的程序
pdb模块还提供其他的接口,看源码
# Simplified interface
def run(statement, globals=None, locals=None):
Pdb().run(statement, globals, locals)
def runeval(expression, globals=None, locals=None):
return Pdb().runeval(expression, globals, locals)
def runctx(statement, globals, locals):
# B/W compatibility
run(statement, globals, locals)
def runcall(*args, **kwds):
return Pdb().runcall(*args, **kwds)
def set_trace(*, header=None):
pdb = Pdb()
if header is not None:
pdb.message(header)
pdb.set_trace(sys._getframe().f_back)
再看一个pdb.runeval的例子
后续还是需要多尝试