目录如下:

  • x.1 大体思路
  • x.2 使用python解释器
  • x.3 *使用vscode的debug console

x.1 大体思路

python debug时具有以下操作

第一,看报错,看报的是什么traceback错误,有的错误一眼就能看出来,就能改。而且要注意,离traceback越近的,是函数调用栈中最内层的,即错误最接近/里面的地方,如果他是在site-package里面,那往往是你在函数调用栈浅层函数的传参有错误,不可能是底层代码的错误。

第二,若traceback是自己不熟悉的,则疯狂打断点找到报错的地方,这个报错的地方不应该是底层代码的地方,即应该是自己写的或者项目中的文件,看懂他的逻辑,传入正确的参数往往就能对。底层代码的逻辑是基本不可能会错误的。

第三,在疯狂打断点找报错地方的时候,如果一看见调入底层代码,即site-package的库,就立马step-out跳出,因为你根本不需要去看懂底层代码的逻辑,它也往往不会有错,遇到底层代码/项目中的不认识的函数就直接浏览器搜索它的功能,这样更加快速。

第四,善于使用print和vscode的搜索函数名功能搜索文件功能,时刻观察正确的代码运行到哪里了。

x.2 使用python解释器

在学习PyTorch的时候,有些函数的代码臃肿,理解起来很烦,这里介绍一种快速理解代码意思的方法。

例如我们要理解下面这段代码

# 已知predict_y和test_label都是tensor类型数据
accuracy = (predict_y == test_label).sum().item() / test_label.size(0)

我们新建一个脚本,创建两个tensor依次拆解步骤测试,尝试理解:

# sum()测试
a = torch.tensor([1, 2, 3])
b = torch.tensor([1, 2, 4])
c = (a == b).sum()
print(c)

# size(0)测试
d = torch.randn(2, 3)
print(d.size(0))
e = d.size(0)
print(e)

先把简单的理解了,后面复杂的代码就理解了,这个方法挺好使。

x.3 *使用vscode的debug console

debug console在调试时,可以通过输入变量名来实时获取内存中的变量,还可以通过重新定义一个变量在内存开辟一块新空间,如下:

python中debug的作用 python debug_调用栈

debug console通常是指开发人员在调试代码时使用的控制台。它通常提供了一个交互式的环境,可以让开发人员在运行时执行代码和查看变量值,以帮助诊断代码错误。

在debug console中,你可以使用变量赋值操作符(如“=”)来赋值变量。这将创建一个变量并为其分配内存空间。但是,需要注意的是,在某些语言中,debug console中的变量可能只在当前作用域中可用,并且可能会被垃圾回收器回收。

总的来说,debug console提供了一个强大的工具,可以帮助开发人员更有效地诊断和修复代码错误。