- 找茬
- 找软件的茬
- 发现程序的缺陷
谁都不敢保证,写的代码没有任何问题 高效查找软件异常 一位优秀的开发工程师 20%的时间写代码 80%的时间用来排错 “不会debug” == “不会代码” == “低工资”
3.debug工具需要具备哪些功能?控制程序的执行 想停则停,想执行则执行 随心所欲 设置断点 在指定位置停止 查看当前命名空间(程序栈)中变量
二、Python中的Debug大法案例代码如下所示:
创建deubg_skills_demo.py文件
import time
from DebugSkills.gifts import send_gift
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
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
继续往下运行,在下一个断点处停下来 isable 断点编号
禁用断点 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 可以监听某个变量或者表达式的值