pdb 是 Python 内置的交互式调试器,名字来自 Python Debugger。它允许开发者在程序运行中设置断点、逐行执行代码、查看变量值、追踪调用栈,以便快速定位错误或理解代码执行流程。
相比于 print() 调试,pdb 提供了更强大、灵活、专业的调试手段。
常见应用场景:
(1)程序运行出现错误但信息不足,需进入断点调试。
(2)想在函数中查看变量的即时值或追踪其变化。
(3)需要逐行执行某段逻辑以观察流程。
(4)需要进入异常现场分析崩溃原因。
(5)替代 print 调试,提升开发效率。
◆ ◆ ◆
核心概念
1、set_trace()
通过 pdb.set_trace() 手动设置断点,程序运行到此处暂停,进入交互式调试。
import pdb
def test():
a = 1
pdb.set_trace() # 设置断点
b = 2
print(a + b)
test()
运行程序后将在命令行进入调试状态,可输入 n(下一步)、p a(打印 a)等命令。
2、命令行调试入口
可在终端直接启动调试器:
python -m pdb your_script.py
适用于从第一行开始调试整个脚本。
3、post_mortem()
在程序出现未捕获异常后,调用 pdb.post_mortem() 可直接进入异常现场。
4、常用命令(记住几个即可)
l:列出当前代码(list)
n:执行下一行(next)
s:进入函数(step)
c:继续执行直到下一个断点(continue)
p 表达式:打印表达式结果
b 行号:设置断点
q:退出调试器
w:查看当前调用栈
◆ ◆ ◆
应用举例
例 1:基本断点调试
import pdb
def calc(x, y):
pdb.set_trace()
result = x * y
return result
print(calc(3, 5))
运行后会暂停在 set_trace() 行,输入命令进行交互调试。
例 2:在异常发生后进入调试
import pdb
def divide(a, b):
return a / b
try:
divide(10, 0)
except Exception:
pdb.post_mortem() # 异常发生后进入调试
例 3:从命令行启动调试器
python -m pdb demo.py
适用于需要从头调试整个脚本的情况。
例 4:以函数调用方式启动调试
import pdb
def add(x, y):
return x + y
result = pdb.runcall(add, 2, 3)
print(result)
例 5:执行多行代码调试
import pdb
code = """
a = 1
b = 2
print(a + b)
"""
pdb.run(code)
◆ ◆ ◆
常用函数速览
post_mortem(traceback=None)
在异常发生后进入调试器,用于分析错误现场。
参数:
traceback:可选的 traceback 对象,默认使用 sys.last_traceback
返回:无
run(statement, globals=None, locals=None)
调试执行一个代码字符串。
参数:
statement:待执行的 Python 代码(字符串形式)
globals:可选,全局变量字典
locals:可选,局部变量字典
返回:无
runcall(func, *args, **kwargs)
以调试模式调用某个函数。
参数:
func:要调试执行的函数
*args:函数位置参数
**kwargs:函数关键字参数
返回:func 的返回值
runctx(statement, globals, locals)
在指定的上下文中调试执行一段代码。
参数:
statement:代码字符串
globals:全局命名空间
locals:局部命名空间
返回:无
set_trace()
手动设置调试断点并暂停程序。
参数:无
返回:无
◆ ◆ ◆
补充说明
1、pdb 属于标准库,无需安装即可使用。
2、可与 IDE(如 PyCharm、VS Code)调试器配合使用。
3、不建议在生产环境代码中保留 set_trace() 或调试断点。
4、在类或模块中调试时,使用 p self、dir(self) 可快速了解对象状态。
5、使用 ! 可以执行 Python 表达式,如 !print(a)。
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.