使用 pdb(Python Debugger)是 python 自带的,即内置的调试工具。调试 Python 源代码时,掌握基础命令和高级技巧可以大幅提高调试效率。以下是 全面的技术总结和高级技巧,涵盖从基础到进阶的调试方法。

被调试源码:

a.py

radius =1

while radius < 4:  
	area = 3.1415926 * radius**2
	print(f"radius is {radius}") 
	print(f"circle area is {area}")
	radius += 1

1. 基础调试命令


(1) 使用 pdb


方式 1:命令行启动

$ python -m pdb a.py

程序会在第一行代码前暂停,进入调试模式。然后开始调试,如下图

注意:按照 python 的编程喜欢,这种方式简单,但会把import、def 都刷一遍,最后进入执行的代码处开始有意义的调试。加入业务代码的执行从第 100 行开始,可以先通过这种方式进入源代码调试状态后,再执行 b 100 打个端点,然后执行 continue 后跑到业务代码开始的地方。如下图:

 

方式 2:代码中插入断点

import pdb; pdb.set_trace()  # Python 3.7+

程序运行到该行时会暂停,进入调试模式。

注意:其中 pdb.set_trace() 一般插在源代码程序的功能性开头处

方式 3:breakpoint()(Python 3.7+)

breakpoint()  # 等同于 import pdb; pdb.set_trace()

可以插入到功能性代码的开头一行


(2) 基本调试命令

命令 缩写 作用
help h 查看所有命令帮助
next n 执行下一行(不进入函数)
step s 进入函数调用
continue c 继续执行直到下一个断点
list l 显示当前代码上下文
print p 打印变量值
quit q 退出调试
return r 执行到当前函数返回

                        break                     b              打断点 


2. 高级调试技巧


(1) 条件断点

(Pdb) break filename.py:line_number, condition

示例:

(Pdb) break a.py:6, area > 5  # 当 area > 5 时在第 6 行暂停


(2) 查看调用栈(Backtrace)

(Pdb) where  # 或 `bt`

显示当前调用栈,帮助定位问题来源。

这里的示例比较简单,没有step 进子函数中去,但也能看出系统自带的函数调用栈:

(3) 修改变量值

(Pdb) !x = 42  # 修改变量 x 的值

在调试过程中动态调整变量值。

(4) 执行任意 Python 代码

(Pdb) import math
(Pdb) p math.sqrt(16)  # 计算并打印结果


可以在调试时执行任意 Python 表达式。

(5) 跟踪函数调用

(Pdb) display x  # 每次执行命令后自动打印 x 的值
(Pdb) undisplay  # 取消跟踪

3. 高级调试场景


(1) 调试异常

python -m pdb -c continue script.py

-c continue 让程序运行直到异常发生,然后进入调试模式。

(2) 调试多线程/多进程

import pdb
pdb.Pdb().set_trace()  # 适用于子进程调试

在子进程中手动设置断点。


(3) 调试异步代码(Async/Await)

import pdb
pdb.set_trace()  # 在 async 函数中使用

适用于 asyncio 调试。

4. 替代 pdb 的现代调试工具

工具 特点
ipdb 基于 IPython 的增强版 pdb,支持 Tab 补全
pdb 支持语法高亮、更好的 UI
PyCharm Debugger 图形化调试,支持条件断点
VS Code Debugger 集成 IDE,可视化调试

 汇个总


基础命令:n(next)、s(step)、c(continue)、p(print)、l(list)、b(break)。

高级技巧:

        条件断点 break filename:lineNumber , condition

        调用栈分析 where / bt

        动态修改变量 !x = 42

替代工具:ipdb、pdb++、PyCharm、VS Code。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐