使用Pdb调试Python方法总结

用Pdb调试有多种方式

使用 Pdb调试 Python的程序的方式主要是下面的三种!下面逐一介绍

命令行加-m参数

命令行启动目标程序,加上-m参数,这样调用 testPdb.py的话断点就是程序执行的第一行之前

本文接下来重点讲到的实例展示就是使用这种方式进行调试的!

python -m pdb testPdb.py
在python交互环境调试

>>> import pdb
>>> import testPdb
>>> pdb.run('testPdb.test()')
代码中插入一段程序

比较常用的,就是在程序中间插入一段程序,相对于在一般 IDE 里面打上断点然后启动 debug,不过这种方式是 hardcode的

if __name__ == "__main__":
  a = 1
  import pdb
  pdb.set_trace()
  b = 2
  c = a + b
  print(c)
然后正常运行脚本: python testPdb.py 到了 pdb.set_trace()那里就会定下来,然后就可以看到调试的提示符 (Pdb)了

针对上面的这段小程序的调试情况如下:


准备测试程序

接下来使用上面介绍的第一种方式来调试 Python程序,以此来介绍 pdb常用的命令,不过在开始之前先要准备好测试的程序代码:

testFun.py

这是一个会被主模块调用的子模块,用于测试使用 Pdb调试的时候,是不是可以断点从主模块跟踪进入子模块(后续有说明)

#!/usr/bin/python
# -*- coding: utf-8 -*-

def add(a, b):
    return a + b
testPdb.py

这是下面被调试的主模块的代码

#!/usr/bin/python
# -*- coding: utf-8 -*-

def sub(a, b):
    return a - b

if __name__ == "__main__":

    print ''
    import testFun
    i = 0
    a = 1
    while(i < 100):
        a = testFun.add(a, 1)
        i = i + 1
    print "累加结果:", a
    print ""

    for letter in 'Pdb':
        print "当前字母:", letter
    print ""

    fruits = ['banana', 'apple', 'mango']
    for fruit in fruits:
        print "当前水果:", fruit
    print ""

    ret = 0
    for num in range(10, 12):
        ret = sub(ret, num)
    print '循环结果:', ret
    print ""

    d = {'abc': 123, 123: "abc"}
    for (k,v) in d.items():
        print "当前键值对:", k, '-', v
    print ""
总结常用的命令

基础命令

h(elp)命令:会打印当前版本 Pdb可用的命令,如果要查询某个命令,可输入 h [command] ,例如 h l 查看 list命令

l(ist)命令:可以列出当前将要运行的代码块

断点管理

b(reak):设置断点

比如 b 12 就是在当前脚本的第 9行加上断点

比如 b sub 就是在当前脚本的 sub函数定义处加断点

除了可以在当前的脚本中添加断点之外,还可以在当前脚本对其他脚本下断点,以上面用到的代码为例 b testFun.add 就可以实现在 testFun.py脚本中的 add函数处加断点

如果只用 b 就会显示现有的全部断点

condition bpnumber [condition]:设置条件断点,比如 condition 2 a==0 ,就是在第二个断点出加条件 “a==0”

cl(ear):删除断点,如果后面带有参数,就是清楚指定的断点;如果不带参数就是清除所有的断点

disable/enable:禁用/激活断点

程序逻辑控制

下面展示的几个命令,需要知道对应的脚本的代码和行号,所以这里先截图展示下面测试需要用到的前几行代码

c(ont(inue)),让程序正常运行,直到遇到下一个断点

n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的

下图中展示的,当对脚本断点调试到 testFun.add(a, 1)时,继续执行n,并不会进入 testFun.add(a, 1)的函数内部

s(tep),跟n相似,但如果当前有一个函数调用,那么 s会进入被调用的函数体中

下图中展示的,当对脚本断点调试到 testFun.add(a, 1)时,继续执行s,会进入 testFun.add(a, 1)对应的函数定义内部,虽然 testFun.add不是本脚本中定义的函数

j(ump),让程序跳转到指定的行数

假如当前所在行是 10,注意:假如执行了 j 20 之后,那么相当于程序直接跳到 20行,中间的 11~19行其实就直接跳过去根本没有被执行到,所以如果这段代码中有变量的声明或对象的初始化需要在 20行及之后被用到,那么等到用到的时候就可能导致报错!

打印重要信息

a(rgs),打印当前函数的参数。比如下图就是展示断点进入到 testFun.add内部之后,打印 testFun.add的参数

p,打印某个变量

退出调试

q,直接退出调试;或者使用 Ctrl+D的方式退出

最后说一句

上面展示的使用 Pdb调试的过程其实是很简单的,文章中主要通过截图展示运行的效果。如果单纯的看一遍文章,不出意外,会很没有头绪,甚至感觉截图中的命令、输出乱七八糟,但是如果亲自动手跟着走一遍流程,花不了一小时,但是效果绝对极佳!

时间: 2024-11-27 22:01:31

使用Pdb调试Python方法总结的相关文章

总结用Pdb库调试Python的方式及常用的命令_python

用Pdb调试有多种方式 使用 Pdb调试 Python的程序的方式主要是下面的三种!下面逐一介绍 命令行加-m参数 命令行启动目标程序,加上-m参数,这样调用 testPdb.py的话断点就是程序执行的第一行之前 本文接下来重点讲到的实例展示就是使用这种方式进行调试的! python -m pdb testPdb.py 在python交互环境调试 >>> import pdb >>> import testPdb >>> pdb.run('testPd

调试Python程序代码的几种方法总结

  这篇文章主要介绍了调试Python程序代码的几种方法总结,文中代码基于Python2.x版本,需要的朋友可以参考下 程序能一次写完并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug. 第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看: ? 1 2 3 4 5 6 7 8 9 10 # e

使用Python中PDB模块中的命令来调试Python代码的教程_python

你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便.本文是一篇快速教程,希望它能让你的编码生活更加容易.1. 一个混乱的程序 出于本教程的目的,让我们研究一下下面的简单程序. 这个程序接收两个命令行参数,然后执行加法和减法操作. (假设用户输入的是有效值,因此代码中我们没有进行错误处理.)   import sys def add(num1=0,

使用PDB模式调试Python程序介绍_python

以前在windows下一直用的idel带的功能调试python程序,在linux下没调试过.(很多时候只是print)就从网上查找一下~ 方法: 复制代码 代码如下: python -m pdb a.py a.py是python文件. (Pdb)模式下的常用命令: q 退出debug h 即help,打印所有可以命令 h w 打印命令 w 的含意 n 执行当前行直到到达下一行或直到它返回 s 执行当前行,一有可能就停止(比如当前行有一个函数调用).它和n(next)的区别是当前行中有函数调用时s

用PDB库调试Python程序

用pdb调试有多种方式可选: 1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前  python -m pdb myscript.py 2. 在Python交互环境中启用调试  >>> import pdb  >>> import mymodule  >>> pdb.run('mymodule.test()') 在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序

使用pdb模块调试Python程序实例

  这篇文章主要介绍了使用pdb模块调试Python程序实例,本文着重讲解了pdb.run()函数.pdb.runeval()函数.pdb.runcall()函数.pdb.set_trace()函数的使用以及pdb调试命令等内容,需要的朋友可以参考下 在Python中,语法错误可以被Python解释器发现,但逻辑上错误或变量使用错误却不容易发现,如果结果没有符合预期,则需要调试,一个很好的调试工具:Python自带的pdb模块.pdb是Python自带的调试模块.使用pdb模块可以为脚本设置断点

使用 VS Code 远程调试 Python 程序

在上一篇文章 远程调试你的 Python 代码 中,我简单介绍了 Python 世界中的两种远程调试模型:PyCharm 选择的 debugger as debug server 模式和 VS Code 提供的 debugger as debug client 模式,并分享了 PyCharm 的远程调试适用于单体应用,VS Code 的远程调试适用于大规模的分布式应用的观点. 随后有同行来信咨询我具体如何使用 VS Code 来远程调试.由于 VS Code Python Plugin 的文档并

Visual Studio 不生成.vshost.exe和.pdb文件的方法

原文:Visual Studio 不生成.vshost.exe和.pdb文件的方法使用Visual Studio编译工程时,默认设置下,即使选择了「Release」时也会生成扩展名为「.vshost.exe」和「.pdb」的文件. 一.先解释一下各个文件的作用: .pdb文件: 程序数据库文件(Program Database File).默认设置下,Debug的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码,可以对程序的调试配置进行增量链接. 而Release的默认设置对P

三星GALAXY ALPHA如何激活开发者选项?GALAXY ALPHA usb调试打开方法

1.这款手机打开usb调试与三星s5是一样的,点击桌面的[应用程序].  开发者选项?GALAXY ALPHA usb调试打开方法-galaxy s5开发者选项">  2.之后我们再找到里面的[设定]按钮点击它打开.    3.再者点击[关于设备]点击打开它.    4.连续点击[内部版本号]7次后,将提示"开发者模式已启用".        5. 点击[<]图标,向上滑动屏幕,即可看到[开发者选项].        好了瑞士我们进入到设置中会看到有一个"