首页 > 其他分享 >Pycharm Debug功能详解

Pycharm Debug功能详解

时间:2023-08-11 22:33:36浏览次数:46  
标签:test1 变量 py add 详解 Debug Pycharm 断点

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

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

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

如何以Debug模式运行代码:

方法1:点击左上工具栏上的Debug图标(虫子图形)
方法2:右击,在菜单中点Debug


Debug运行时界面:

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

from test2 import add


def fun(d):
    a = d.get("a", 2)
    b = d.get("b", 2)
    c = add(a, b)
    print(c)
    for i in range(3*c):
        print(i)


if __name__ == '__main__':
    d = {"a": 1}
    fun(d)

test2.py:

def add(x, y):
    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:

from test2 import add
import requests


def fun(d):
    a = d.get("a", 2)
    b = d.get("b", 2)
    requests.get("http://www.baidu.com")
    c = add(a, b)
    print(c)
    for i in range(3*c):
        print(i)


if __name__ == '__main__':
    d = {"a": 1}
    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:

def add(x, y):
    x += 1
    y += 2
    print(x)
    print(y)
    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

 

标签:test1,变量,py,add,详解,Debug,Pycharm,断点
From: https://www.cnblogs.com/songzhenhua/p/17624070.html

相关文章

  • 【后端面经-数据库】Redis详解——Redis基本概念和特点
    目录1.Redis基本概念2.Redis特点2.1优点2.2缺点3.Redis的应用场景面试模拟参考资料声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试着拆分Redis的相关章节,辅......
  • 使用pip安装pycharm插件时,要使用管理员权限打开cmd安装
    1.问题安装到一半报错报错1报错22.解决解决1原文:https://blog.csdn.net/weixin_44899752/article/details/128372969下面是收集的一些国内的pip源:阿里云http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(douban)h......
  • pycharm设置保存时自动格式化代码(Auto Reformat Code)
    原文:https://blog.csdn.net/qq_41906934/article/details/1246318261.手动格式化代码Code->ReformatCode格式化快捷键为Ctrl+Alt+L,但是可能和锁屏快捷键冲突,下面介绍如何配置保存时自动格式化代码2.保存格式化代码安装FileWatchers插件FileWatchers插件在安装Pych......
  • 【后端面经-数据库】Redis详解——Redis基本概念和特点
    (【后端面经-数据库】Redis详解——Redis基本概念和特点)声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试着拆分Redis的相关章节,辅以思维导图的形式介绍Redis的相......
  • 一文详解Apipost数据模型功能
    在Apipost数据模型中用户可以预先创建多个数据模型,并在API设计过程中重复利用这些模型来构建API创建数据模型在左侧导航点击「数据模型」-「新建数据模型」在右侧工作台配置数据模型参数引入数据模型在API设计预定义响应期望下点击引用数据模型,并选择需要导入的数据模型即可将创建......
  • PyCharm 2023.2 删除无效的解释器Interpreters
    1.File中找到Settings2.在Settings里搜索interpreter3.点击ShowAll4.点击-即可......
  • Pycharm配置git
    原文链接:https://www.jianshu.com/p/ae92970d20621.下载Gitee插件同样在设置页面,选中Plugins,并搜索Gitee安装。安装后,重启一下Pycharm。在VersionControl中会增加Gitee选项。2.配置Git账号在上一步新增的VersionControl>Gitee,添加你的账号密码。添加账号密码;......
  • Android FrameWork——Binder机制详解
    1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个问题,那就是BinderProxy.transact该方法本地化实现,同时我指出了它的具体代码位置:\frameworks\base\core\jni\android_util_Binder.cpp->staticjbooleanandroid_os_BinderPr......
  • pip安装使用详解
    pip类似RedHat里面的yum,安装Python包非常方便。本节详细介绍pip的安装、以及使用方法。1、pip下载安装1.1pip下载 #wget"https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb"--no-check-certificate1.2pip......
  • Android FrameWork——Touch事件派发过程详解
    对于android的窗口window管理,一直感觉很混乱,总想找个时间好好研究,却不知如何入手,现在写的Touch事件派发过程详解,其实跟android的窗口window管理服务WindowManagerService存在紧密联系,所以从这里入手切入到WindowManagerService的研究,本blog主要讲述一个touch事件如何从用户消息的采......