• python 调试模式pdb(转)


    标准库的pdb

    pdb是Python自带的一个库,为Python程序提供了一种交互式的源代码调试功能,包含了现代调试器应有的功能,包括设置断点、单步调试、查看源码、查看程序堆栈等。如果读者具有C或C++程序语言背景,则一定听说过gdb。gdb是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。如果读者之前使用过gdb,那么,几乎不用学习就可以直接使用pdb。pdb和gdb保持了一样的用法,这样可以降低工程师的学习负担和Python调试的难度,pdb提供的部分调试命令见下表。

    有两种不同的方法启动Python调试器,一种直接在命令行参数指定使用pdb模块启动Python文件,如下所示:

    python -m pdb test_pdb.py
    

    另一种方法是在Python代码中,调用pdb模块的set_trace方法设置一个断点,当程序运行自此时,将会暂停执行并打开pdb调试器。

    #/usr/bin/python
    from __future__ import print_function
    import pdb
    
    def sum_nums(n):
        s=0
        for i in range(n):
            pdb.set_trace()
            s += i
            print(s)
    
    if __name__ == '__main__':
        sum_nums(5)
    

    两种方法并没有什么质的区别,选择使用哪一种方式主要取决于应用场景,如果程序文件较短,可以通过命令行参数的方式启动Python调试器;如果程序文件较大,则可以在需要调试的地方调用set_trace方法设置断点。无论哪一种方式,都会启动Python调试器,前者将在Python源码的第一行启动Python调试器,后者会在执行到pdb.set_trace()时启动调试器。

    启动Python调试器以后,就可以使用前面的调试命令进行调试,例如,下面这段调试代码,我们先通过bt命令查看了当前函数的调用堆栈,然后使用list命令查看了我们的Python代码,之后使用p命令打印了变量当前的取值,最后使用n执行下一行Python代码。

    lmx@host1:~/temp$ python test_pdb.py
    > test_pdb.py(9)sum_nums()
    -> s += i
    (Pdb) bt
      test_pdb.py(13)<module>()
    -> sum_nums(5)
    > test_pdb.py(9)sum_nums()
    -> s += i
    (Pdb) list
      4
      5     def sum_nums(n):
      6         s=0
      7         for i in range(n):
      8             pdb.set_trace()
      9  ->         s += i
     10             print(s)
     11
     12     if __name__ == '__main__':
     13         sum_nums(5)
    [EOF]
    (Pdb) p s
    0
    (Pdb) p i
    0
    (Pdb) n
    > test_pdb.py(10)sum_nums()
    -> print(s)

    转自https://zhuanlan.zhihu.com/p/25942045

  • 相关阅读:
    2018.10.11----2018.10.13 计算机网络(写了两天)
    2018.10.10 Java的The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 错误
    2018.10.10 MAC 的Launchpad图标改变大小的设置
    2018.10.8 Hibernate中解决乱码问题---配置一个过滤器
    2018.10.7 理解Hibernate的工作原理及其中的ORM详解
    2018.10.6 Hibernate配置文件详解-------ORM元数据配置 &&& hibernate主配置文件
    2018.10.5 hibernate导入约束,在Eclipse的xml文件实现自动提示
    2018.10.4 AndroidStudio
    2018.10.3 MianShiBaoDian JavaWeb后端部分
    C语言练习之 冒泡排序(二)
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/8706833.html
Copyright © 2020-2023  润新知