zoukankan      html  css  js  c++  java
  • Pycharm Debug功能详解

    初学Python时,我们可能都是通过print来调试程序,但这种方法效率不高。入门Python后,Pycharm的Debug功能还是有必要学一下的,可以提高调试代码的效率。

    什么是Debug模式:
    简单说Debug模式和正常运行唯一的区别,就是会在断点处停下来,可以通过控制一行一行的去运行代码,而且可以看到整个运行过程中所有变量的实时值。

    如何设置断点:
    在代码编辑区的行号后左键单击,即可将该行设置为断点,再次点击则取消。

    如何以Debug模式运行代码:
    方法1:点击左上工具栏上的Debug图标(虫子图形)
    方法2:右击,在菜单中点Debug


    Debug运行时界面:

    我们编写2个示例代码文件
    test1.py:

     1 from test2 import add
     2 
     3 
     4 def fun(d):
     5     a = d.get("a", 2)
     6     b = d.get("b", 2)
     7     c = add(a, b)
     8     print(c)
     9     for i in range(3*c):
    10         print(i)
    11 
    12 
    13 if __name__ == '__main__':
    14     d = {"a": 1}
    15     fun(d)
     

    test2.py:

    1 def add(x, y):
    2     return x + y
     

    设置断点,开启 debug 调试模式运行后,显示如图

    可以看到,此时:
    1.代码编辑区蓝条就是当前程序运行到的位置,即该运行c = add(a, b)了,但还没有运行

    2.代码编辑区暗红条就是当前程序设置的所有断点行

    3.左下是程序堆栈,蓝条代表当前是运行到test1.py文件的第7行了,是在fun()函数中。
    蓝条下面那行,指是停在test1.py的第15行,即最开始运行程序,程序从13行的main开始,运行到第15行后,进入了fun()函数

    4.右下是变量展示区,现在默认选中的是堆栈的顶部,即fun函数,可以看到,此时a,b,d变量的值。如果我们点堆栈的第2行,将显示main那一层的变量和值。


    Debug工具栏说明:

    下面来看看Debug区最左边那一竖排调试相关按钮都是干啥的:

    图片

    再来看看更重要的横排按钮:

    图片

    1.跳转到当前断点(断点后你为了查看逻辑可能去了其他文件或行,点这个就能回到当前断点的行)

    2.step over(F8快捷键):在当前层代码单步执行。例子中即左下的堆栈,当前是test1.py第7行的fun函数,按F8后会执行第7行,停在第8行

    3.step into(F7快捷键):单步执行,但会进入子函数。例子中左下堆栈顶是fun,test1.py:7,按F7后会进入add函数,跳转到test2.py第2行的add函数,此时看左下堆栈顶就是add,tet2.py:2。如果一直按F7,则会一层层一直进入。

     图片

    4.step into my code(Alt+Shift+F7快捷键):单步执行,只进入自己代码的子函数,不会进入导入包的子函数。

    我们把上面test1.py的代码添加个requests语句,并把第8、9行设成断点
    test1.py:

     1 from test2 import add
     2 import requests
     3 
     4 
     5 def fun(d):
     6     a = d.get("a", 2)
     7     b = d.get("b", 2)
     8     requests.get("http://www.baidu.com")
     9     c = add(a, b)
    10     print(c)
    11     for i in range(3*c):
    12         print(i)
    13 
    14 
    15 if __name__ == '__main__':
    16     d = {"a": 1}
    17     fun(d)
     

    现在再来看代码,test1.py,test2.py是我们自己的代码,requests库是我们引入的第3方包。

    Debug运行后,停在第8行,按Alt+Shift+F7,会执行第8行,停在第9行(因为requests.get是导入库的函数,不是自己的代码,不进入)。再按一次Alt+Shift+F7,会跳转到test2.py第2行的add函数,因为test2.py是自己的代码。


    5.force step into(Alt+Shift+F7快捷键):执行下一行忽略lib和构造对象等。

    6.step out(Shift+F8快捷键):返回上一层函数(即左下堆栈的第2行)。
    我们把test2.py的代码多写两行
    test2.py:

    1 def add(x, y):
    2     x += 1
    3     y += 2
    4     print(x)
    5     print(y)
    6     return x + y

    重新Debug,当断点到test1.py的c = add(a, b),按F7,进入test2.py第2行,再按F7停在第3行,如果你不想再看add()函数中的运行,按Shift+F8,会返回test1.py中


    7.run to cursor(Alt+F9快捷键):直接运行至下一断点处。

    8.evaluate expression:计算表达式。
    我们点击这个计算器图标后,在打开的界面中可以输入表达式,点evaluate后会给出结果

    图片

    我们也可以输入类似:

    d
    d.get('a')
    a * b


    Debug变量区

    接下来我们再看看右下的变量区,Debug过程中我们随时可以查看到所有变量和对象的实时值。但真正的程序,变量成百上千,从中翻找1个变量太麻烦,我们可以设置特别关注的变量。点左侧那一竖排按钮中的+号,输入变量a,则会在最上出现变量a,并高亮。-号就是删除一个关注变量。

    图片

    假如我们要关注的变量也有10个,加上原有的变量,一个窗口显示太紧张,点击眼镜图标,则会分开展示。

    图片

    另外我们不光可以在右下的变量区查看变量,Debug过程中代码后面也会显示出实时变量的值。并且当点击某变量后,也会浮窗显示

    图片


    最后,教大家2个调试的小技巧。

    直接Debug循环的第X次:

    如test1.py,我们只在print(i)处打断点,希望看循环第6次i的值,正常运行到该行断点后,我们可以F8单步调试,更快的可以F9或ALT+F9跳到下一个断点,但即使这样,也要按6次才能到,假如循环是10000次,我们想看第5000次那不累死了。

    在该行断点上右击,在Condition中输入表达式i==5,再次运行,则会跳过前4次,直接停在i为5的那次。

    修改Debug过程中的变量值

    或者我们也可以粗暴点,直接改i的值。我们取消上面Condition中的表达式,正常Debug,到断点时,i=0,我们在右下变量区右击i,选择Set Value,把i的值改成5,再按F8单步运行,可以看到print出来的是5了。之后再按F8往下走时,i会回归到正常值1

    ---------------------------------------------------------------------------------

    关注微信公众号即可在手机上查阅,并可接收更多测试分享~

  • 相关阅读:
    delphi 的插件机制与自动更新
    delphi 的 ORM 框架
    canner CMS 系统 (公司在台湾) https://www.canner.io/
    区块链 ---- 数字货币交易
    BIM平台 http://gzcd.bim001.cn
    TreeGrid 控件集 :delphi 学习群 ---- 166637277 (Delphi学习交流与分享)
    UniGUI 如何进行 UniDBGrid 的单元 Cell 的计算 ?
    国产 WEB UI 框架 (收费)-- Quick UI,Mini UI
    iOS尽量不要在viewWillDisappear:方法中移除通知
    Tips:取消UICollectionView的隐式动画
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/14599034.html
Copyright © 2011-2022 走看看