如何进入调试模式
1.点击如下图标,或者按下Ctrl+Shift+D
即可跳转到该窗口,点击运行和调试即可开始调试
2.或者点击运行在这里选择调试,可以使用快捷键F5
直接开启调试
如果你不想使用调试而是直接运行可以点击右侧的箭头
断点
点击代码左侧的编辑器的侧栏来设置断点,或者使用快捷键F9
在调试的时候必须要有断点,程序才能停下(或者程序出现错误,会在错误的地方停下)
调试介绍
在如图所示的位置添加断点
这是个简单的人为制造除零异常的程序
import numpy
import random
def div(data):
for i in data:
temp = 100/i
if __name__ == '__main__':
data = list(numpy.random.rand(100))
data[random.randint(0, 99)] = 0
div(data)
点击运行和调试(或者按下F5
)
选择Python Debugger
调试工具
屏幕上侧出现了一行工具栏
依次为
继续/暂停 F5:
控制调试程序的运行和停止,点击运行后会继续运行直到遇到下一个断点逐过程 F10:
会一行一行运行,如果遇到了函数不会进入而是直接跳过单步调试 F11:
也是一行行运行,但是遇到了函数会进入函数体单步跳出 Shift+F11:
如果在函数体或子例程里面,会执行完后面的所有代码重新启动Ctrl+shift+F5:
重新启动调试程序停止 Shift+F5:
停止调试
变量监视
你可以在右侧看到此时的局部变量Locals
和全局变量Globals
安装jupyter
插件
随后你可以在数据查看器中查看数值
监视数据
你可以右键将你关心的数据添加到监视中
随后在每一次运行的时候更新,监视的数据也会更新方便你查看
添加表达式
你可以在表达式中键入你关心的值,例如我关心i
是否等于0
不同的断点
记录点
记录点在调试的时候不会停住,而是会在调试控制台打印输出你的消息
右键可以添加记录点
或者在此处添加
可以在此处填写你想输出的消息,{}内可以添加你想打印的代码内容
可以在下方的调试控制台看到你的日志输出
在程序出现问题的时候你想知道某些值的情况下很有用
触发式断点
此断点不会直接启用而是在你选定的断点触发后才会启用
在此处选择你想等待的断点
例如我这个斐波那契数列的例程
def fibonacci(n):
fib_sequence = [0, 1] # 前两个斐波那契数列的值
if n <= 0:
return "请输入一个正整数"
elif n == 1:
return [0]
elif n == 2:
return fib_sequence
for i in range(2, n):
next_number = fib_sequence[-1] + fib_sequence[-2]
fib_sequence.append(next_number)
return fib_sequence
if __name__ == "__main__":
num = int(input("输入一个整数"))
res = fibonacci(num)
print(res)
print("ok")
只有在我键入负数时第一个断点会触发,随后导致这个触发式断点触发启用
在键入正数时程序完全不会中断
条件断点
表达式型
只有在你编写的条件表达式为真时断点才会触发
例如在i==0
的时候断点触发
启用调试的时候只有在i等于0时才会中断
命中次数式
只有在该段代码运行第多少次时才会中断
可以看到在调试时输出了9个hello
后中断,且只会中断这一次
联合使用
在左下角的断点栏里面选择编辑条件即可
你可以为一个断点同时使用上面的四种功能
- 表达式
- 命中次数
- 日志消息
- 触发式
例如我添加上两种
i<5 时会中断,执行的第十次会中断
注意 如果你加上了记录点,如下所示
那么在调试的时候这个断点不会中断,而是只会在应该中断的时候在调试控制台打印记录消息
函数断点
专门用于给函数添加断点,无需在具体调用的地方添加
每次在调用函数时会自动中断
输入你想中断的函数名
同样你可以在函数断点上设置你想要的中断条件和命中次数
配置文件相关
调试库函数
在有时候你出现中断了,但是出错的地方不是你的代码,此时你看不到函数中的状态,因为vscode默认是不会进入系统函数的。或者说你想学一下某些库函数的写法,那么你可能需要这种方式
例如你想看一下json.loads
的运行过程
import json
data = json.loads(1)
print(data)
默认的调试是不会进入的
接下来教你如何改变
选择第一个
还是第一个
这是默认的调试配置文件
增加上一行即可调试库函数了
"justMyCode": false
我们调试一下看看
可以看到这里有我们刚刚的配置显示,直接点箭头开始调试
点击单步调试
可以看到我们顺利的进入到了函数的执行过程
有些库函数是用c/c++编写的这样就不能对其进行这样的调试,例如
带参数的调试
使用下面的简单示例来讲一下带参数的调试, 这是deepseek生成的你不需要关心他的写法,我只想让你知道怎么把参数传给程序进行调试
import argparse
import math
def calculate_operations(a, b):
"""执行数学运算并返回结果"""
results = {
'sum': a + b,
'difference': a - b,
'product': a * b,
'quotient': a / b if b != 0 else 'undefined',
'power': math.pow(a, b),
'logarithm': math.log(a, b) if a > 0 and b > 0 and b != 1 else 'undefined'
}
return results
if __name__ == '__main__':
# 设置命令行参数解析
parser = argparse.ArgumentParser(description='数学运算计算器')
parser.add_argument('num1', type=float, help='第一个数字')
parser.add_argument('num2', type=float, help='第二个数字')
parser.add_argument('--verbose', '-v', action='store_true', help='显示详细输出')
args = parser.parse_args()
# 执行计算
results = calculate_operations(args.num1, args.num2)
# 输出结果
if args.verbose:
print("详细计算结果:")
for op, result in results.items():
print(f"{op:>12}: {result}")
else:
print(f"简略结果: 和={results['sum']}, 积={results['product']}")
这是执行的效果
点击调试
选择第二个即可
直接在输入框输入参数
你便能顺利的含参调试程序
这里举的是你第一次调试的情况
如果你按照我上面的调试库函数的操作生成了配置文件,那么可能不会跳出这个框
此时你可以点击添加配置
选择python调试程序
再选带参版本
可以看到多了一个配置
这样你就可以选择调试配置了
选择好你想要的配置点击绿色的箭头即可调试了
也许你的程序每次调试的参数不需要修改,你不想自己输入,你可以直接在配置文件里面写好
再添加一个配置
我将名字改成了固定参数,这个name
你可以自由修改
然后在args
里按顺序提供你的参数即可,注意要加上双引号
可以看到又多了一个选项固定参数,选择这个进行调试即可