spyder 断点调试python代码

想了一下,觉得需要写这个内容,因为自己折腾了很久,网上内容又超级乱很不全

进入spyder后,随便打开一个文件
spyder最上栏有如下几个图标
在这里插入图片描述
从左到右分别是:

  • debug file (ctrl+f5)
  • run current line (ctrl+f10)
  • step into function or method of current line (ctrl+f11)
  • run until current function or method returns (ctrl+shift+f11)
  • continue execution until next breakpoint (ctrl+f12)
  • stop debugging (ctrl+shift+f12)

即:(记住下面的标号,我以后使用标号表示对应按钮)

  • 1开始调试
  • 2调试当前行(每点击一次执行一行)
  • 3进入当前行对应的函数或方法(下面会解释)
  • 4退出函数或方法(在3进入函数后进行debug,如果已经找到了问题所在想退出函数,可以使用4)
  • 5执行下一个断点(即从一个断点直接进入下一个断点)
  • 6结束调试

举例:

import numpy as np

def fun1():
    a=[1,2,4]
    b=[4,5,2]
    c=a+b
    print(c)
    
def fun2():
    w = -1
    k = 3
    y = np.abs(w*k)
    return y

test1 = fun1()
test2 = fun2()

通常我们写完一个函数之后,如fun1,c=a+b,但是我们想知道这两个相加之后得到的c是不是a,b中对应元素相加,这个时候通常我们可以print©出来看看,但是对于复杂的函数这样非常不方便,每次都要print。鉴于此,我们采用调试的方法。现在我们的目标是:知道函数/方法 fun1中的c是多少。

方法1,设置断点

由于我们要知道的是c,因此直接在c=a+b的下一行设置断点(断点设置方法:直接在要设置行的行数外鼠标左键双击,取消断点也是对着红色小点双击),如:
在这里插入图片描述
然后直接点开始调试按钮(即上面提到的标号1),从右下角的console就可以看到已经运行到了那一行(有个箭头指着那一行)
在这里插入图片描述
而在右上方直接可以看到变量里面已经出来了a,b,c。然后点击标号6结束即可(下面内容运行完之后重新运行都要先结束,即点击标号6,我将不再强调这一点)
在这里插入图片描述
当然我们也可以设置断点在c=a+b那一行,然后点击标号1调试,此时会运行到断点c=a+b这一行(但是记住,当箭头指到这一行的时候是还没执行的,是表示即将执行这一行),我们可以看到右上边的变量a和b都出来了,这个时候我们点击标号2单步执行,这样就可以执行c这一行了,得到上面一行的结果。

方法2,进入函数

进入函数,顾名思义,即如果我们定义一个函数,如fun1(),我们在函数内有一些量,如c=a+b,我们想知道这个量是多少,此时我们可以通过标号3进入函数体内,然后在调试。
此时我们不设置断点(或将断点设置在test1=fun1()这一行),先考虑第一种不设置断点,这样点击标号1调试,右下角的console可以见箭头是指在第一行的import …这一行的。这样点击标号2单步执行,然后我们会看到下一步是def fun1()这一行,(此时点击标号3进入函数是没用的),我们一直点击标号2直到运行到test = fun1(),然后点击标号3进入函数,看到又重新回到了def fun1()这一行。这个时候表示,我们已经进入了函数fun1,所以点击标号2单步执行一直执行到c=a+b这一行的下一行即可。
在这里插入图片描述
:注意:

如果我们只是针对某个函数体,如fun1(),更快的方法是,我们直接在test1 = fun1()这一行设置断点,然后在点击标号1调试后,直接点击标号5进入下一个调试点,这个时候直接跳到test1 = fun1(),再执行上面的方法进入函数。

类的调试class

类的调试则不能没有实例,如下

import numpy as np

class Test_fun():
    def __init__(self):
        pass 
    
    def fun1(self):
        a=[1,2,4]
        b=[4,5,2]
        c=a+b
        print(c)
        
    def fun2(self):
        w = -1
        k = 3
        y = np.abs(w*k)
        return y

调试点为
在这里插入图片描述
此时进行debug则不能进入函数fun1和fun2里面,这个时候需要在外面使用实例,增加test1,test2,如下

import numpy as np

class Test_fun():
    def __init__(self):
        pass 
    
    def fun1(self):
        a=[1,2,4]
        b=[4,5,2]
        c=a+b
        print(c)
        
    def fun2(self):
        w = -1
        k = 3
        y = np.abs(w*k)
        return y
#
test1 = Test_fun().fun1()
test2 = Test_fun().fun2()

如果只想看fun1里的参数,只需要在外面增加test1实例即可。

猜你喜欢

转载自blog.csdn.net/Mr_Cat123/article/details/90378961