• 【转载】PDB命令行调试Python代码


    转载自这里

    (博主按:PDB调试python代码和用GDB调试c++代码很类似)

      你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多。然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便。本文是一篇快速教程,希望它能让你的编码生活更加容易。

    1. 一个混乱的程序

    出于本教程的目的,让我们研究一下下面的简单程序。

    这个程序接收两个命令行参数,然后执行加法和减法操作。

    (假设用户输入的是有效值,因此代码中我们没有进行错误处理。)

    import sys
    def add(num1=0, num2=0):
        return int(num1) + int(num2)
    def sub(num1=0, num2=0):
        return int(num1) - int(num2)
    def main():
        #Assuming our inputs are valid numbers
        print sys.argv
        addition = add(sys.argv[1], sys.argv[2])
        print addition
        subtraction = sub(sys.argv[1], sys.argv[2])
        print subtraction
    if __name__ == '__main__':
        main()

    2. PDB

    Python提供了一个有用的模块PDB,它实际上是一个交互式源代码调试器。

    你需要下面的两行代码来使用此模块。

    3. 程序执行触发调试器

    一旦你设置好断点以后,你就可以像平时一样执行程序。

    在这里我们有几个选项,让我们在下面步骤中看看一些调试指令。

    4. 下一行->n

    在你的调试器提示中,输入n运行到下一行。

    我们可以使用n来逐行执行整个程序,但这其实没有什么用处。

    可能你已经看到,PDB实际上并没有进入我们的add函数中。下面,就让我们看看其他几个令调试更加有趣的选项。

    注意:
    一个更酷的特性是你可以单击回车键来执行以前的命令(在本例中只要指令n)。

    5. 打印->p

    下面,我们再次开始调试程序。(你可以通过单击c使PDB跳到末尾或者直到下一个断点,因为程序中我们并没有其他的断点了,所有程序将会执行完成。)

    现在我们将进入加法函数内部。

    6. 单步->s

    我们可以使用“s”进入加法函数内部。

    此时单击“r”将会把我们带到前面进入函数的返回语句。

    如果你想快速跳转到一个函数的结尾处,那么这个指令将很有用。

    7. 动态添加断点- > b

    前面,在程序运行之前,我们使用pdb.set_trace()设置了一个断点。

    不过,经常在调试会话已经开始之后,我们想要在程序中特定的地方添加断点。

    这里我们就可以使用选项“b”来实现这种目的。

    我们重新开始执行程序。

    同时,PDB还为该断点分配了一个号码(在本例中是1)。为了以后的执行,我们可以通过开启或禁用断点号码来启用或停用对应的断点。

    8. 列表->l

    有时在调试的时候,你可能会忘记此时你处在代码的什么地方。在这种情况下,使用“l”将会打印出一个友好的总结,它能够显示出此刻你在代码中的位置。

    在调试会话期间,你可以分配变量来帮助你进行调试,知道这些对你来说也是有帮助的。例如:

    如果你想设置一些如n(即PDB指令)这样的变量,你应该使用这种指令:

    10. 结束->q

    最后,在代码的任何地方如果你想结束调试,可以使用“q”,那么正在执行的程序将会终止。

    11. 扩展阅读

    本文只涉及到了PDB的表面用法,其实使用PDB你还可以做到更多(PDB 文档)。

    使用IPython的人可以在ipdb中找到一个更好的调试器,它提供了tab补充、语法高亮和其他一些很酷的特性。

  • 相关阅读:
    常见的几种性能测试指标及计算公式
    性能测试分析
    性能测试的流程
    性能测试的基本知识
    Python的深拷贝、浅拷贝
    Http基础知识
    求List<int>中相等且连续的偶数的索引
    unity资源打包之后配置的生成
    unity在资源打包的时候,关于 hash 计算的简单总结
    C#中string.Join的用法
  • 原文地址:https://www.cnblogs.com/tlz888/p/7055657.html
Copyright © 2020-2023  润新知