全网最实用的 Debug 调试技巧汇总 -Python 大佬偷偷使用的神技

发布于 更新于
本文目录
  1. 一、思考❓❔
  2. 1.什么是debug?
  3. 2.为什么需要debug?
  4. 3.debug工具需要具备哪些功能?
  5. 二、Python中的Debug大法?
  6. 1.pdb操作 (^_-)-☆
  7. 三、Pycharm debug操作??
  8. 1.打开Python Prompt
  9. 2.Step Over / F8
  10. 3.Step Into / F7
  11. 4.Step Out / Shift+F8
  12. 5.Step Into My Code / ALT+Shift+F7
  13. 6.Evaluate Expression
  14. 7.Quick Evaluate Expression
  15. 8.Watching
  16. 四、总结??

技术文章测试开发

找茬

一、思考❓❔

image.png

1.什么是debug?

  • 找茬

    • 找软件的茬

  • 发现程序的缺陷


2.为什么需要debug?

image.png
  • 谁都不敢保证,写的代码没有任何问题

  • 高效查找软件异常

  • 一位优秀的开发工程师

    • **20%**的时间写代码

    • **80%**的时间用来排错

  • “不会debug” “不会代码” “低工资”


3.debug工具需要具备哪些功能?

image.png
  • 控制程序的执行

    • 想停则停,想执行则执行

    • 随心所欲

  • 设置断点

    • 在指定位置停止

  • 查看当前命名空间(程序栈)中变量


二、Python中的Debug大法?

案例代码如下所示:

创建deubg_skills_demo.py文件

import time

from DebugSkills.gifts import send_gift


def say_love(name, talk):
    print(f"{name}: {talk}!")
    print(show(3))
    print(f"{send_gift()}, 能代表我的心!")


def show(num):
    print(f"{'轰隆' * num}!")
    print(f"{'⚡' * num}")
    return "还敢再发誓吗?"


def long_long_ago(name, talk):
    # breakpoint()
    print("\nlong long ago...")
    print("当初没被雷劈死的原因既然是爱错了那个她/他")
    print(f"{name}: {talk}!")
    print(show(4))
    print(f"{send_gift()}, 能代表我的心!")


if __name__ == '__main__':
    lover = input("请输入你爱的人: ")
    love_talk = input("请输入爱的箴言: ")
    # 方法一:
    # import pdb
    # pdb.set_trace()

    # 方法二:
    # breakpoint()
    breakpoint()
    say_love(lover, love_talk)
    time.sleep(5)
    lover = input("\n请输入你爱的人: ")
    love_talk = input("请输入爱的箴言: ")
    long_long_ago(lover, love_talk)


创建gifts.py文件

import random

gifts = ["99朵玫瑰", "钻戒", "马尔代夫三十日游",
         "北京二环内的一套厕所", "玛莎拉蒂车钥匙",
         "免费自行车司机"]


def send_gift():
    """
    送礼物
    :return:
    """
    one_gift = random.choice(gifts)
    return one_gift


1.pdb操作 (^_-)-☆

image.png
  • 系统自带的debug工具(无需安装)

  • 将以下代码放在需要调试的地方(类似于设置断点)

    # 通用方法
    import pdb; pdb.set_trace()
    
    # Python3.6以上版本
    breakpoint()


  • 当程序执行到上述代码所在位置时,会自动开启一个console终端

    • "->"是接下来要执行的代码(当前还未执行)

image.png


  • 可以在终端运行的命令

    • list或者l

      • 显示当前运行的代码

      • 默认列出11行代码

    image.png


    • p 变量名 或者 p 需要运行的表达式

      • 打印变量的值

      image.png


    • step或者s

      • 如果在函数调用处执行,则会进入函数体内部

    image.png

    image.png


    • next或者n

      • 如果在函数调用处执行,则不会进入函数体内部

    image.png


    • enter

      • 重复执行上一次的命令

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

      • 设置断点

      • filename可选,如果不传,默认在当前文件设置断点

      image.png

    image.png


    • c或者continue

      • 继续往下运行,在下一个断点处停下来

    image.png


    • disable 断点编号

      • 禁用断点

      image.png


    • enable 断点编号

      • 启用断点

    • cl或者clear 断点编号

      • 清除断点

    image.png


    • display或者undisplay 变量

      • 监听或者不监听某个变量

      • 如果变量值改变,会自动显示

      image.png


    • h或者help

      • 帮助信息

      image.png


    • h 具体命令

      • 具体命令的帮助文档


    • h pdb

      • pdb的完整文档


三、Pycharm debug操作??

image.png


1.打开Python Prompt

image.png

会出现一个ipython的控制台

  • 可在控制台查看当前命名空间中的变量

  • 也可执行Python表达式

image.png


2.Step Over / F8

  • 按调试工具栏中的 image.png

  • 类似于pdb中的next

  • 程序不会进入到函数体内部


3.Step Into / F7

  • 按调试工具栏中的 image.png

  • 类似于pdb中的step

  • 程序会进入到函数(方法)体内部、系统源码、第三方模块源码中


4.Step Out / Shift+F8

  • 从函数体内部跳出 image.png


5.Step Into My Code / ALT+Shift+F7

  • 按调试工具栏中的 image.png

  • 主要关注自己写的代码

  • 从系统源码、第三方模块源码中跳到自己写的代码中


6.Evaluate Expression

image.png
  • 在当前命名空间内计算表达式的值


7.Quick Evaluate Expression

  • 快速计算表达式的值

image.pngimage.png


8.Watching

image.png
  • 类似于pdb中的display

  • 可以监听某个变量或者表达式的值


四、总结??

image.png
  • 作为代码编写者,掌握代码的调试技巧是必备的

  • 能提升工作效率,提高代码质量

  • Python中Debug调试工具和技巧非常多

  • 最常用、最实用的知识点,本文均有覆盖

来源:testingpai

继续阅读