python ---pdb调试

210 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」当习惯用pycharm调试python代码的时候,遇到命令行执行代码,该怎么调试跟踪遇到的错误呢,python有跟调试c语言gdb一样的pdb

基础

参考链接:官方文档docs.python.org/zh-cn/3/lib…

源码地址:github.com/python/cpyt…

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等

图片.png

这个时候,我没有设置任何断点,默认断点是程序执行的第一行,我们再试一下, 修改test.py文件

图片.png

保存,重新以pdb调试执行这个test, 看程序停在了文件的第一行

图片.png

2. pdb的命令

pdb 当然像gdb一样有很多命令,它有多少命令我们可以在pdb调试符后输入help来查看,也可以输入h,如图所示

图片.png

详细介绍一下常用的命令

图片.png

我们实际使用一下部分命令

  1. h command 根据帮助信息可以看到,exit和quit命令是等价的,都可以退出pdb

图片.png 2. b lineno 打断点

图片.png

  1. c 执行,遇到断点停止

图片.png

剩下的可以自己有兴趣去尝试

图片.png

2 在代码中使用

先看一个例子,修改这个test.py, 然后正常执行

图片.png

可以看到,我们在代码的头部引用了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的例子

图片.png

后续还是需要多尝试