温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python pdb调试器如何使用

发布时间:2022-06-13 09:42:05 来源:亿速云 阅读:147 作者:iii 栏目:开发技术

这篇文章主要介绍了python pdb调试器如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python pdb调试器如何使用文章都会有所收获,下面我们一起来看看吧。

    pdb 使用方法

    1. 常用命令

    a. 断点设置

    b(reak) [([filename:]lineno | function) [, condition]]

    如果带有 lineno 参数,则在当前文件相应行处设置一个断点。如果带有 function 参数,则在该函数的第一条可执行语句处设置一个断点。行号可以加上文件名和冒号作为前缀,以在另一个文件(可能是尚未加载的文件)中设置一个断点。另一个文件将在 sys.path 范围内搜索。请注意,每个断点都分配有一个编号,其他所有断点命令都引用该编号。

    如果第二个参数存在,它应该是一个表达式,且它的计算值为 true 时断点才起作用。

    如果不带参数执行,将列出所有中断,包括每个断点、命中该断点的次数、当前的忽略次数以及关联的条件(如果有)。

    tbreak [([filename:]lineno | function) [, condition]]

    临时断点,在第一次命中时会自动删除。它的参数与 break 相同。

    cl(ear) [filename:lineno | bpnumber …]

    如果参数是 filename:lineno,则清除此行上的所有断点。如果参数是空格分隔的断点编号列表,则清除这些断点。如果不带参数,则清除所有断点(但会先提示确认)。

    b. 运行

    n(ext)

    继续运行,直到运行到当前函数的下一行,或当前函数返回为止。( nextstep 之间的区别在于,step 进入被调用函数内部并停止,而 next (几乎)全速运行被调用函数,仅在当前函数的下一行停止。)

    s(tep)

    运行当前行,在第一个可以停止的位置(在被调用的函数内部或在当前函数的下一行)停下。

    c(ont(inue))

    继续运行,仅在遇到断点时停止。

    r(eturn)

    继续运行,直到当前函数返回。

    c. 查看

    p expression

    在当前上下文中运行 expression 并打印它的值。

    print() 也可以使用,但它不是一个调试器命令 — 它执行 Python print() 函数。

    pp expression

    p 命令类似,但表达式的值使用 pprint 模块美观地打印。

    d. 其他

    h(elp) [command]

    不带参数时,显示可用的命令列表。参数为 command 时,打印有关该命令的帮助。help pdb 显示完整文档(即 pdb 模块的文档字符串)。由于 command 参数必须是标识符,因此要获取 ! 的帮助必须输入 help exec

    q(uit)

    退出调试器。 被执行的程序将被中止。

    2. 使用方法一

    python3 -m pdb test.py

    这里程序来自于 无重复字符的最长子串 。

    def lengthOfLongestSubstring(s: str) -> int:
        st = set()
        n = len(s)
        right, result = -1, 0
        for left in range(n):
            if left!=0: st.remove(s[left - 1])
            while right + 1 < n and s[right + 1] not in st:
                st.add(s[right + 1])
                right += 1
            result = max(result, right - left + 1)
        return result
    
    if __name__=='__main__':
        print(lengthOfLongestSubstring("abcabcbb"))

    输入 python3 -m pdb test.py 会自动停在第一行

    (base) cilinyan@amax:~/clyan/xshell$ python3 -m pdb test.py
    > /data2/cilinyan/clyan/xshell/test.py(1)<module>()
    -> def lengthOfLongestSubstring(s: str) -> int:

    以下是 python3 -m pdb test.py 的一些使用过程:

    (base) cilinyan@amax:~/clyan/xshell$ python3 -m pdb test.py
    > /data2/cilinyan/clyan/xshell/test.py(1)<module>()
    -> def lengthOfLongestSubstring(s: str) -> int:
    (Pdb) ll
      1  ->	def lengthOfLongestSubstring(s: str) -> int:
      2  	    st = set()
      3  	    n = len(s)
      4  	    right, result = -1, 0
      5  	    for left in range(n):
      6  	        if left!=0: st.remove(s[left - 1])
      7  	        while right + 1 < n and s[right + 1] not in st:
      8  	            st.add(s[right + 1])
      9  	            right += 1
     10  	        result = max(result, right - left + 1)
     11  	    return result
     12  	
     13  	if __name__=='__main__':
     14  	    print(lengthOfLongestSubstring("abcabcbb"))
    (Pdb) b 5
    Breakpoint 1 at /data2/cilinyan/clyan/xshell/test.py:5
    (Pdb) ll
      1  	def lengthOfLongestSubstring(s: str) -> int:
      2  	    st = set()
      3  	    n = len(s)
      4  	    right, result = -1, 0
      5 B->	    for left in range(n):
      6  	        if left!=0: st.remove(s[left - 1])
      7  	        while right + 1 < n and s[right + 1] not in st:
      8  	            st.add(s[right + 1])
      9  	            right += 1
     10  	        result = max(result, right - left + 1)
     11  	    return result
    (Pdb) p right
    -1
    (Pdb) p s
    'abcabcbb'

    3. 使用方法二

    import pdb; pdb.set_trace()

    这里程序来自于 无重复字符的最长子串 。

    import pdb
    def lengthOfLongestSubstring(s: str) -> int:
        st = set()
        n = len(s)
        right, result = -1, 0
        pdb.set_trace()
        for left in range(n):
            if left!=0: st.remove(s[left - 1])
            while right + 1 < n and s[right + 1] not in st:
                st.add(s[right + 1])
                right += 1
            result = max(result, right - left + 1)
        pdb.set_trace()
        return result
    
    if __name__=='__main__':
        print(lengthOfLongestSubstring("abcabcbb"))

    输入 python test.py 会自动设置 pdb.set_trace() 的下一行,以下是一些使用过程:

    (base) cilinyan@amax:~/clyan/xshell$ python test.py
    > /data2/cilinyan/clyan/xshell/test.py(8)lengthOfLongestSubstring()
    -> for left in range(n):
    (Pdb) n
    > /data2/cilinyan/clyan/xshell/test.py(9)lengthOfLongestSubstring()
    -> if left!=0: st.remove(s[left - 1])
    (Pdb) n
    > /data2/cilinyan/clyan/xshell/test.py(10)lengthOfLongestSubstring()
    -> while right + 1 < n and s[right + 1] not in st:
    (Pdb) c
    > /data2/cilinyan/clyan/xshell/test.py(15)lengthOfLongestSubstring()
    -> return result
    (Pdb) c
    3
    (base) cilinyan@amax:~/clyan/xshell$

    关于“python pdb调试器如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python pdb调试器如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI