­

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

  • 2019 年 10 月 3 日
  • 筆記

一、思考❓❔

1.什么是debug?

  • 找茬
    • 找软件的茬
  • 发现程序的缺陷

2.为什么需要debug?

  • 谁都不敢保证,写的代码没有任何问题
  • 高效查找软件异常
  • 一位优秀的开发工程师
    • 20%的时间写代码
    • 80%的时间用来排错
  • “不会debug” == “不会代码” == “低工资”

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

  • 控制程序的执行
    • 想停则停,想执行则执行
    • 随心所欲
  • 设置断点
    • 在指定位置停止
  • 查看当前命名空间(程序栈)中变量

二、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操作 (^_-)-☆

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

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

    # 通用方法  import pdb; pdb.set_trace()    # Python3.6以上版本  breakpoint()
  • 当程序执行到上述代码所在位置时,会自动开启一个console终端

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

  • 可以在终端运行的命令

    • list或者l

      • 显示当前运行的代码
      • 默认列出11行代码

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

      • 打印变量的值

    • step或者s

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

  • next或者n

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

  • enter

    • 重复执行上一次的命令
  • b(reak) [ ([filename:]lineno | function) [, condition] ]

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

  • c或者continue

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

  • disable 断点编号

    • 禁用断点

  • enable 断点编号

    • 启用断点
  • cl或者clear 断点编号

    • 清除断点

  • display或者undisplay 变量

    • 监听或者不监听某个变量
    • 如果变量值改变,会自动显示

  • h或者help

    • 帮助信息

  • h 具体命令
    • 具体命令的帮助文档
  • h pdb
    • pdb的完整文档

三、Pycharm debug操作??

1.打开Python Prompt

会出现一个ipython的控制台

  • 可在控制台查看当前命名空间中的变量
  • 也可执行Python表达式

2.Step Over / F8

  • 按调试工具栏中的

  • 类似于pdb中的next
  • 程序不会进入到函数体内部

3.Step Into / F7

  • 按调试工具栏中的

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

4.Step Out / Shift+F8

  • 从函数体内部跳出

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

  • 按调试工具栏中的

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

6.Evaluate Expression

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

7.Quick Evaluate Expression

  • 快速计算表达式的值

8.Watching

  • 类似于pdb中的display
  • 可以监听某个变量或者表达式的值

四、总结??

  • 作为代码编写者,掌握代码的调试技巧是必备的
  • 能提升工作效率,提高代码质量
  • Python中Debug调试工具和技巧非常多
  • 最常用、最实用的知识点,本文均有覆盖