别院牧志知识库 别院牧志知识库
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 辨析

    • Python 中 exec()和 eval()的区别
    • Ptyhon 中使用 is None 而不是 ==None 问题
  • Sockets编程

  • Django

  • stackoverflow

  • Flask

  • 全栈之路

  • 面试

  • 代码片段

  • 异步编程

  • 😎Awesome资源

  • PEP

  • Python工匠系列

  • 高阶知识点

  • Python 学习资源待整理
  • 设计模式

  • 好“艹蛋”的 Python 呀!
  • FIFO | 待学清单📝
  • pip 安装及使用
  • 数据分析

  • 源码阅读计划

  • OOP

  • 关于 python 中的 setup.py
  • 并行分布式框架 Celery
  • 七种武器,让你的代码提高可维护性
  • 使用 pdb 调试 Python 代码
    • 引言
    • 常用命令
    • 相关链接
  • 每周一个 Python 标准库
  • 🐍Python
佚名
2022-04-25
目录

使用 pdb 调试 Python 代码

# 引言

之前和同事做项目分享的时候了解过 pdb 的使用,但是因为感觉稍微有点复杂所以也没有很深入的时间学习。今年面试的时候又被问到线上调试,所以打算学习一下这个模块的使用。

按照 Real Python 的说法,使用 pdb 你可以查看应用程序中任何变量的状态。还可以在任何时候停止并恢复应用程序的执行流,这样就可以确切地看到每行代码如何影响其内部状态。

这对于跟踪难以发现的 bug 非常有用,并且允许您更快更可靠地修复错误代码。有时候,通过查看 pdb 中的代码并了解值是如何变化的,这会让人大开眼界,并且会有“顿悟”的时刻,偶尔还会看到🤦。

# 常用命令

命令 简写 作用
args a 查看当前函数参数
break b 不加数字查看断点,加数字表示在某一行打断点
clear cl 清除所有断点,加数字表示清除第几个断点
continue c 运行程序直至遇到下一个断点
disable 无 将指定的断点失效
display 无 一直显示变量的值
enable a 将指定的断点生效
help h 查看帮助
ignore 无 跳过断点 n 次
interact 无 进入包含当前环境变量的 python 解析器
jump j 跳转到程序指定行
list l 列出周围 11 行代码,list 1,6 查看 1 到 6 行的代码
longlist ll 查看全部代码
next n 执行下一条语句(不进入函数)
p 无 输入表达式
pp 无 格式化输出表达式
quit q 退出调试
restart run 重新启动 debug
return r 执行当前运行函数到结束
step s 执行下一条步(进入函数)
source 无 获取对象(方法、类等)的源码
undisplay 无 取消一直显示变量的值
until unt 执行直到某一行
whatis 无 输出变量类型
where w 打印当前执行堆栈
参数 说明 示例
h(elp) [command] 帮助文档 h b: 查看 b 命令的文档
l(ist) [first[, last]] 列出当前或范围周围代码 l 5, 20: 列出 5 到 20 行代码 l: 查看当前位置的代码
b(reak) [[ filename: ] lineno function [, condition ]] 打断点
w(here) 查看当前执行的位置 w
tbreak [[ filename: ] lineno function [, condition ]] 设置临时断点,运行完毕后会删除这个断点
cl(ear) [filename:lineno bpnumber [bpnumber ……]] 清除断点
disable [bpnumber [bpnumber ……]] 停用断点 用法和 cl 一样
enable [bpnumber [bpnumber ……]] 启动断点 用法和 cl 一样
ignore bpnumber [count] 忽略某个断点几次 ignore 1 3:忽略断点列表中第 1 个断点 3 次,一般循环中用,可以查看下面 忽略断点示例
condition bpnumber [condition] 给断点设置条件 condition 1 i==4:当断点列表中第 1 个断点中变量 i 等于 4 的时候执行断点
commands [bpnumber] 给断点写一个脚本执行 查看下面 断点脚本示例
s(tep) 执行下一条命令,如果本句是函数调用,则 s 会执行到函数的第一句 示例参考下面的 s 执行效果示例
n(ext) 执行下一条语句,如果本句是函数调用,则执行函数,接着执行当前执行语句的下一条。 示例参考下面的 n 执行效果示例
unt(il) 执行到下一行 参考下面 unt 执行效果
r(eturn) 执行当前运行函数到结束
c(ontinue) 继续执行,直到遇到下一条断点
j(ump) lineno 跳转至指定程序行(如果是前行,则忽略中间行代码。如果是后退,状态重设为回退行状态) :是跳转到不是执行。示例:j 执行效果
a(rgs) 显示当前所有变量
p expression 打印出当前所在函数中的变量或表达式结果 p params:打印 params 参数
pp expression 格式化打印出来的结果 pp params:打印 params 参数
alias [name [command]] 自定义一个函数,参数可由%1,%2 来表示,类似 Python 的 lambda 用法参考 定义临时函数
unalias name 删掉别名函数 unalias name
run [args ……] 重新执行
q 退出

# 相关链接

  • pdb --- Python 的调试器 — Python 3.10.4 文档 (opens new window)
  • Python Debugging With Pdb – Real Python (opens new window)
  • How to use the Python debugger (pdb) | Enable Sysadmin (opens new window)
  • Python Debugger – Python pdb - GeeksforGeeks (opens new window)
  • python pdb 代码调试 - 最全最详细的使用说明 - 简书 (opens new window)
  • 如何使用 Pdb 调试 Python - konglingbin - 博客园 (opens new window)
  • python 断点调试 PDB | FreezeJ' Blog (opens new window)
编辑 (opens new window)
#pdb#debug
上次更新: 2024-07-15, 08:03:22
七种武器,让你的代码提高可维护性
每周一个 Python 标准库

← 七种武器,让你的代码提高可维护性 每周一个 Python 标准库→

最近更新
01
提升沟通亲和力的实用策略
03-26
02
工作
07-15
03
如何选房子
06-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 IMOYAO | 别院牧志
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式