pdb调试学习笔记

pdb 调试

一、 资源链接

二、 学习内容

2.1 相关命令

命令

调用命令,例如上面给出的示例代码的调用命令:

python -m pdb main.py

命令描述
l显示当前行的源代码。
n执行下一行代码,如果当前行包含函数调用,直接执行完该函数。
s执行下一行代码,如果当前行有函数调用,进入函数内部。
c继续执行程序,直到遇到下一个断点或程序结束。
b设置断点,可在当前行、指定行号或指定文件行号设置断点。
cl清除断点,可以清除特定断点或所有断点。
p打印变量的值。
q退出调试器,并终止程序运行。
r继续执行代码,直到从当前函数返回。
w显示调用栈,查看程序当前的调用路径。
u / d在调用栈中向上或向下移动一层,查看不同栈帧中的代码和变量。
h显示帮助信息,hhelp 后跟命令名可查看详细帮助。

演示代码_1(其中代码故意添加了错误,但是可以执行)

#文件名 main.py
import lib

def main() -> None:
    num_list = [1, 2, 3, 4, 5]
    result = lib.square_sum(num_list)
    print(f"square sum of {num_list} is {result}")

main()
#文件名 lib.py
from typing import Sequence

def square_sum(num:Sequence[int]) -> int:
    result = 0
    for i in range(len(num)):
        n = num[1]
        result += n**2
    return result

演示代码_2(代码不可执行,程序崩溃)

# 文件名test.py
def add(n):
    return n+1
add("hello")

可以使用 python 的交互模式

python - i test.py

再执行:

import pdb
pdb.pm()

再进行调试,调试结束后使用 q 命令推出 pdb,再在 python 解释器中使用 quit()或 exit()退出

注意事项

  1. 函数的定义和函数体都算作一条完整的语句,在执行 n/next 命令时会全部跳转
  2. 直接按回车 pdb 会执行上一次的命令
  3. 要进入函数,我们可以使用 s/step 命令
  4. 如果不想一步一步调试可以使用 c/contine 命令,让程序直接运行到下一个断点或者结束程序
  5. 可以使用 b/break 命令来设置断点

例如:我要在 lib.py 文件中的第 4 行设置断点,可以使用命令 b lib.py:4
如果不给 b/break 命令添加参数,列出当前设置的所有断点

  1. 可以使用 cl/clear 命令来清除断点

例如: cl < 断点序号 > 断点序号就是 b 命令打印出来的断点对应的数字
cl 不加任何参数会删除所有断点

  1. 断点还可以通过 disable+ 序号来进行禁用,或者使用 enable+ 序号来重新启用

在这里插入图片描述

b 命令中的 Enb 一列显示的是断点是否启用,如上图所示

  1. 我们可以使用 until 命令告诉 pdb 直接运行到指定的行号
  2. 可以使用 p 命令来查看变量的值

因为 pdb 的命令是直接支持 python 语法的,可以将需要打印的列表放在一起,作为列表打印出来
在这里插入图片描述

相关建议:用 p 命令打印一些复杂的结构的时候,结果可能会很乱,例如这里打印全局变量的话
P globals() #这里的 globals()就是 python 的普通函数的调用
可以使用 pp 命令来格式化输出

  1. w/where 命令可以显示当前函数的调用堆栈,我们可以 up 命令来切换到上一个函数调用栈,对应的还有 down 命令

在这里插入图片描述

这里不太显眼的大于号表示的就是我们现在处于的函数调用栈,注意 up 和 down 命令只用于切换函数调用栈,并不执行任何语句,因此我们可以随意地移动上下文

  1. 最后 help 命令可以列出所有 pdb 支持的所有命令,可以使用 help+ 命令名来获取更加详细的信息
  2. 上面的命令在 c 语言调试器 gdb 也是通用的
  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值