Python内置debug库: pdb用法详解


0. 引言

pdb(Python Debugger)是Python的内置调试器,使用pdb进行调试可以帮助你深入了解程序的执行流程和变量状态,有助于快速定位和解决问题。通过上述常用命令和示例代码,你可以有效地在Python项目中使用pdb进行调试。

下面是pdb的一些常用功能和用法的详细介绍。

1. 基本用法

1.1 设置断点

要使用pdb调试Python代码,可以在需要调试的地方插入pdb.set_trace(),程序运行到这一行时会暂停,进入调试模式。

例子

import pdb

def add(a, b):
    return a + b

def main():
    x = 10
    y = 20
    pdb.set_trace()  # 设置断点
    result = add(x, y)
    print(f"Result: {result}")

if __name__ == "__main__":
    main()

运行程序后,程序会在pdb.set_trace()处暂停,进入交互式调试模式。
在这里插入图片描述

1.2 通过命令行启动 pdb

可以直接从命令行启动pdb进行调试(此时不要求打断点):

python -m pdb your_script.py

此时会停留在代码第一行,然后你就可以依次 debug 所有的 python 代码。

2. 常用命令

2.1 n (next)

执行下一行代码,不会进入函数内部。

(Pdb) n

2.2 s (step)

进入当前行调用的函数。

(Pdb) s

2.3 c (continue)

继续执行程序,直到遇到下一个断点。

(Pdb) c

2.4 l (list)

显示当前代码行以及周围的代码。

(Pdb) l

2.5 p (print)

打印变量的值。

(Pdb) p x

2.6 h (help)

显示帮助信息。

(Pdb) h

2.7 b (break)

设置断点,可以在指定行或指定函数处设置断点。

(Pdb) b 12  # 在第12行设置断点
(Pdb) b add  # 在add函数处设置断点

2.8 cl (clear)

清除断点。

(Pdb) cl 1  # 清除编号为1的断点

2.9 q (quit)

退出调试器。

(Pdb) q

3. 例子

以下是一个完整的例子,展示了如何使用pdb进行调试:

import pdb

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

def main():
    x = 10
    y = 20
    pdb.set_trace()  # 设置断点
    sum_result = add(x, y)
    mul_result = multiply(x, y)
    print(f"Sum: {sum_result}")
    print(f"Product: {mul_result}")

if __name__ == "__main__":
    main()

运行程序并调试:

  1. 运行程序: 直接运行上面的代码,程序会在pdb.set_trace() 的下一行处暂停。

  2. 查看代码: 使用l命令查看当前代码行和周围的代码。

(Pdb) l

在这里插入图片描述

  1. 打印变量值: 使用p命令打印变量的值。
(Pdb) p x
10
(Pdb) p y
20
  1. 单步执行: 使用n命令执行下一行代码。
(Pdb) n
> /xx/test_pdb.py(11)main()
-> print(f"Result: {result}")
  1. 继续执行: 使用c命令继续执行程序,直到遇到下一个断点或程序结束。

欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤
在这里插入图片描述

相关推荐

  1. 详解Python函数 !!!

    2024-06-18 18:12:01       49 阅读
  2. ORACLE 11G 详解

    2024-06-18 18:12:01       49 阅读
  3. python_pathlib学习笔记

    2024-06-18 18:12:01       78 阅读
  4. python函数dir()、divmod()详解

    2024-06-18 18:12:01       41 阅读
  5. python函数compile(),complex()详解

    2024-06-18 18:12:01       33 阅读
  6. python函数enumerate()、eval()详解

    2024-06-18 18:12:01       38 阅读
  7. Python函数hex()详解

    2024-06-18 18:12:01       33 阅读
  8. Python函数input()详解

    2024-06-18 18:12:01       29 阅读
  9. Python 函数 float() 详解

    2024-06-18 18:12:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 18:12:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 18:12:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 18:12:01       82 阅读
  4. Python语言-面向对象

    2024-06-18 18:12:01       91 阅读

热门阅读

  1. mysql中社区版如何杀死锁

    2024-06-18 18:12:01       24 阅读
  2. TypeScript中的枚举

    2024-06-18 18:12:01       29 阅读
  3. Python网络安全项目开发实战,如何看清Web攻击

    2024-06-18 18:12:01       29 阅读
  4. Ubuntu 22.04 一键安装 Oracle 11GR2 单机

    2024-06-18 18:12:01       26 阅读
  5. Spring Boot框架的原理及应用详解(一)

    2024-06-18 18:12:01       23 阅读
  6. 事件传播机制 与 责任链模式

    2024-06-18 18:12:01       26 阅读
  7. 有哪些技术可代替docker?

    2024-06-18 18:12:01       29 阅读
  8. 鸿蒙开发 一 (四)、ArkTS开发 --UI篇

    2024-06-18 18:12:01       32 阅读
  9. Collections.sort()方法总结

    2024-06-18 18:12:01       28 阅读
  10. C# 循环

    2024-06-18 18:12:01       29 阅读
  11. **args和**kwargs是什么?

    2024-06-18 18:12:01       28 阅读
  12. 聚合分析是Elasticsearch中非常强大的工具

    2024-06-18 18:12:01       34 阅读
  13. Linux 下 自动补全功能

    2024-06-18 18:12:01       34 阅读