导读
初学编程的时候,很多人教过我一个好习惯,就是,写一点点,测一点点,保证每步都先对,再基于之前的代码去写后面的。这是一个好习惯,不过我还是不太喜欢这样做,面对的也不总是那么简单的代码。
有些时候你可能突然想到一些好点子,或者是架构上的整理,一下子要改很多脚本很多地方,一步步那样做虽不说效率慢多少(有时写测试代码真的很耗时),但有时你是真的不想那样去打断自己的思路,否则前面的测过了,可能你也忘了后面你本来想干嘛的……这个时候,你可以用上各种工具,一次性的去找出多个问题,单点调试逐个击破,不过其实,一个程序应用有一个健壮的日志系统或者是debug系统非常重要,多花几天时间,提前写一个功能完整强大的debug功能类出来,会让你后面事倍功半,一劳永逸,否则你后面浪费太多时间去debug,很可能最后发现还是要有一个专门的debug类才做的下去……
本文用的测试代码:
from torchvision import transforms
from torchvision.datasets import FashionMNIST
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
#数据集准备
train_data = FashionMNIST(
root = "./data/FashionMNIST",
train = True,
transform = transforms.ToTensor(),
download = True #如果没下载数据,就下载数据;如果已经下载好,就换为False
)
test_data = FashionMNIST(
root = "./data/FashionMNIST",
train = False,
transform = transforms.ToTensor(),
download = True #如果没下载数据,就下载数据;如果已经下载好,就换为False
)
train_data_x=train_data.data
train_data_y=train_data.targets
test_data_x=test_data.data
test_data_y=test_data.targets
print(train_data_x.shape)
print(train_data_y.shape)
print(type(train_data_x))
print(type(train_data_y))
print(test_data_x.shape)
print(test_data_y.shape)
def function1(x):
for i in range(x):
print(i)
function1(7)
一、debug环境介绍
点击这个爬虫就可开始debug
在debug前我们需要设置断点:(设置几个都行)
进入debug后,左下角:
1)debugger里面可以看到存在的变量:
2)console里面可以我们一步步调试的过程,输出的结果会打印在里面:
二、debug按钮介绍
分别是
1)step over 快捷键:F8
2)step into 快捷键:F7
3)step into my code 快捷键:alt+shift+F7
4) step out 快捷键:shift+F8
2.1、step into:单步执行(遇到函数也是单步)注意看蓝色的线变化(蓝色的线,代表即将被debug,但是还没有debug到)
刚我debug了两次,结果如下:
step into 遇到进了函数也是单步(以我们这里定义的循环打印函数为例):
2.2、step over:单步执行(遇到函数,全部运行)
这个相比step over 就是函数里执行的区别:(step over 是直接执行完)
2.3、step into my code:(直接跳到下一个断点)
这个很好理解了,这里我有三个断点,所以会debug三次,然后结束:
2.4、step out : 执行完剩下的函数,并跳到上一层函数
就是之前在函数内部单步调试时,用step out 能一下执行完,返回到上一层函数。
用了之后,整个函数直接执行完,但进程未结束
看蓝色的线,返回到了上一层函数