常用基础调试

  • 直接在python脚本中添加breakpoint(),运行时会自动暂停并进入pdb调试环境。
  • 使用pdb.set_trace(),可以在代码任意位置设置断点,运行时会自动暂停并进入pdb调试环境。
  • 使用pdb.run('python script.py'),可以直接进入pdb调试环境,并运行指定的python脚本。
  • 日志记录:使用 tee 保存调试过程到文件:
    python script.py | tee debug.log
    

🔧 一、启动调试

1. 侵入式(代码内断点)

在需暂停的代码行插入 pdb.set_trace()

import pdb

def example(a, b):
    result = a + b
    pdb.set_trace()  # 程序运行到此暂停
    return result

直接运行脚本:python script.py[citation:1][citation:2][citation:7]。

2. 非侵入式(命令行启动)

无需修改代码,通过命令启动调试:

python -m pdb script.py

程序会在第一行自动暂停


⌨️ 二、常用调试命令

命令简写作用
nextn执行下一行(不进入函数)
steps执行下一行(进入函数内部)
continuec继续运行直到下一个断点或结束
printp打印变量值(p x
listl显示当前代码上下文(默认11行)
breakb设置断点(b 行号b 函数名
wherew显示当前调用栈位置
returnr执行到当前函数返回
quitq退出调试器[citation:1][citation:2][citation:5][citation:7]

三、高级调试技巧

  1. 条件断点
    在循环或特定条件下触发断点:

    for i in range(10):
        if i > 5:  # 当i>5时暂停
            pdb.set_trace()
        print(i)
    

    或通过命令设置:b 10, i>5(在第10行设置条件)

  2. 调用栈操作

    • w:查看当前调用栈层次。
    • u/d:在调用栈中向上/向下移动(用于多层函数调试)
  3. 修改变量值
    在调试中动态修改变量:

    (Pdb) !x = 20  # 将x的值改为20
    (Pdb) p x
    20
    

    使用 ! 避免与命令冲突

  4. 跳过循环
    untilunt 行号:执行到指定行(跳过循环):

    (Pdb) unt 15  # 执行至第15行