Python pdb调试器详细教程

在Python可使用一个叫pdb的模块用于调试代码;pdb模块为Python程序定义了一个交互式的源代码调试器,你可通过它设置断点、逐行执行、堆栈检查等等常用调试功能;

使用方法

你可通过使用pdb对整个脚本文件进行调试:

python -m pdb yourscript.py

也可在程序中添加以下代码为程序添加断点,使程序进入pdb调试器:

import pdb; pdb.set_trace()

在3.7版本中,新添加了一个内置函数breakpoint(),其效果等同于上述代码;

python pdb

当看到(Pdb)字样表示程序进入了pdb调试器;

pdb调试器命令

本文使用以下代码作为介绍pdb调试器的测试代码:

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

x1 = 1
x2 = 2
breakpoint()
print(x1,x2,add(x1,x2))

将代码保存为main.py并在命令行使用python main.py运行,程序已设置断点,将进入pdb调试器模式;

在调试器中执行代码

你可以在pdb调试器中执行python代码,比如修改变量,调用函数,打印信息;

python pdb

进入pdb调试器后,除了执行python代码,还可使用某些命令对程序进行调试;下列命令中()部分表示为全称,且可省略;

查看帮助 h(elp) [command]

不带参数时,打印所有可用的命令;使用参数时,则显示该参数的完整文档;

python pdb help

打印堆栈跟踪信息 w(here)

打印一个堆栈跟踪信息;

python pdb where

设置断点 b(reak) [[filename:]lineno] | function]

如果不带参数,则列出所有中断;

如果参数是行号,则在当前文件中设置一个断点,如果指定了文件名,则在该文件的指定行设置一个断点,pdb调试器在sys.path中搜索该文件;

如果参数是函数名,则在该函数的起始位置设置中断;

设置临时断点 tbreak [[filename:]lineno] | function]

设置一个临时断点,命中一次时自动移除;参数于break命令相同;

清除断点 cl(ear) [filename:lineno | bpnumber [pbnumber ...]]

不使用参数时,则清除所有断点,需要输入y或yes确认;

如果参数指定了文件名和行号,则清除该行断点;

如果参数是断点号(多个使用空格分开),则清除这些断点;断点号可使用b(reak)命令查看;

禁用断点 disable [bpnumber [bpnumber ...]]

该命令会禁用断点号(多个断点号使用空格区分);禁用意味着该断点不再使程序停止执行,断点继续保留在断点列表中,可以使用enable命令重新启用;

启用断点 enable [bpnumber [bpnumber ...]]

启用指定的断点,参数与disable命令相同;

忽略断点 ignore bpnumber [count]

给指定断点设置一个忽略计数,如果省略忽略计数,则忽略计数设置为0;

当忽略计数为0时,断点变为活动状态;当非0时,则计数在断点命中且未被禁用时递减;

继续执行 s(tep)

执行当前行,能够进入函数体;

python pdb step

继续执行 n(ext)

继续执行,但不会进入函数体;

继续执行 r(eturn)

继续执行,直到当前函数返回位置;

继续执行 unt(il) [lineno]

如果没有指定行号,则执行到大于当前行号的位置;

如果指定了行号(行号必须大于当前行号),则在指定行号或大于指定行号的地方停止;

继续执行 c(ont(inue))

继续执行,只在碰到断点的地方停止;

列出源码 l(ist) [first,last]]

如果没有指定参数,则列出当前行位置前后11行的代码;

如果指定了参数,则列出指定范围内的代码;例如:list 3,5 将列出第3行到第5行的代码;

列出所有源码 ll | longlist

列出当前文件或函数的所有源码;

打印当前函数的参数列表 a(rgs)

打印当前函数的参数列表:

python pdb args

打印表达式的值 p expression

结合上下文,评估表达式的值,并打印该值;

python pdb p

打印表达式的值 pp expression

该命令与p命令相似,只不过该命令对数据进行美化输出;

查看类型 whatis expression

查看表达式的数据类型;

python pdb whatis

显示源码 source expression

尝试获取指定表达式的源码并显示;

退出pdb调试器 q(quit)

退出调试器,正在运行的程序将被终止;

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/python-pdb.html

分类: 计算机技术
推荐阅读:
Python @classmethod装饰器 在 Python 中,@classmethod 是一个装饰器,用于将一个普通方法转换为类方法。装饰器是一种语法糖,它可以修改已有函数的行为而不修改其定义。@classmethod 装饰器通常用于在类中定义类方法。
Rust获取代码的运行时间 在 Rust 中,你可以使用 std::time::Instant 模块来测量代码的运行时间。以下是一个简单的示例代码,演示如何在 Rust 中测量代码的运行时间:
Python str()函数 str() 函数用于将指定的对象转换为字符串类型。如果对象已经是字符串类型,则返回对象本身;否则,会调用对象的 __str__() 方法来进行转换。
Golang实现判断文件或文件夹是否存在 golang通过使用 os包中的Stat()函数和IsNotExist()函数即可判断文件或文件夹是否存在。
Python里with语句的用法与技巧 本文将详细讲解Python语言中with语句的用法,以及如何让自定义的类也支持with语句;
让Linux终端像电影里一样下起数字雨 在Linux系统里,如果你想要实现电影里的数字雨,一条命令即可: