• python pdb调试


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

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

    python -m pdb yourscript.py
    
    • 1

    也可在程序中添加以下代码为程序添加断点,使程序进入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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    将代码保存为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)

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

  • 相关阅读:
    苹果全球销量超越小米重回第二,荣耀回归国内手机市场第一梯队
    mybatis 数据库字段为空or为空串 忽略条件过滤, 不为空且不为空串时才需nameParam过滤条件
    P1972 [SDOI2009] HH的项链
    springboot 发布tomcat(zip包)
    sprintboot项目通过interceptor和filter实现接入授权控制
    怎么设置浏览器默认搜索引擎,设置默认搜索引擎的方法步骤
    Unity中UI组件对Shader调色
    景区AR虚拟三维场景沉浸式体验成为新兴的营销手段
    JAVA计算机毕业设计在线玩具租赁系统Mybatis+源码+数据库+lw文档+系统+调试部署
    Docker镜像加载原理
  • 原文地址:https://blog.csdn.net/adley_app/article/details/126805450