Pycharm Debug功能详解

摘要:
左键单击代码编辑区域中的行号以在调试模式下运行代码:单击左上角工具栏上的调试图标(bug图)。方法2:在调试模式下运行后,1。代码编辑区域中的蓝色条是当前程序运行的位置,即c=add(a)应该运行,但尚未运行。2.代码编辑区域中的深红色条是当前程序设置的所有断点行。3.左下方是程序堆栈,进入fun()函数。4.右下方是可变显示区域1。跳转到当前断点(在断点之后,您可能已转到其他文件或行以查看逻辑。

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

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

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

Pycharm Debug功能详解第1张

如何以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 调试模式运行后,显示如图

Pycharm Debug功能详解第2张

可以看到,此时:
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区最左边那一竖排调试相关按钮都是干啥的:

Pycharm Debug功能详解第3张

图片

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

Pycharm Debug功能详解第5张

图片

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,则会一层层一直进入。

Pycharm Debug功能详解第7张

 图片

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方包。

Pycharm Debug功能详解第9张

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后会给出结果

Pycharm Debug功能详解第10张

图片

我们也可以输入类似:

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


Debug变量区

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

Pycharm Debug功能详解第12张

图片

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

Pycharm Debug功能详解第14张

图片

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

Pycharm Debug功能详解第16张

图片


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

直接Debug循环的第X次:

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

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

Pycharm Debug功能详解第18张

修改Debug过程中的变量值

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

Pycharm Debug功能详解第19张

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

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

Pycharm Debug功能详解第20张

免责声明:文章转载自《Pycharm Debug功能详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Dubbo分布式日志追踪Zabbix故障处理系列下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用Python获取本机网卡IP数据包

这几天用到了raw socket,用python写了些demo程序,这里记录下,也方便我以后查阅。 首先我们看一个简单的sniffer程序: #! /usr/bin/python # code for linux import socket #s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket...

分享在winform下实现左右布局多窗口界面

在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform、WPF中实现其实也很容易,我这里就分享一个:在winform下实现左右布局多窗口界面。 我这里说的多窗口是指一个父窗口包含多个子窗口,在winform中实现这种效果很简单,即将某个窗口的IsMdiContainer设为true,然后将其它...

量化参数QP:quantization parameter 以及 HEVC

一、介绍 1、量化就是把信号的连续取值映射成多个离散的幅值的过程,实现了信号取值多对一的映射。 2、残差数据进过变换之后,变换系数具有较大的取值范围,量化可以有效减小信号的取值范围,进而获得更好的压缩效果,量化是造成失真的根本原因   二、衡量失真的三种准则(分别有对应的公式): 1、均方差MSE 2、信噪比SNR 3、峰值信噪比PSNR   三、HEVC...

JAVA协程 纤程 与Quasar 框架

ava使用的是系统级线程,也就是说,每次调用new Thread(....).run(),都会在系统层面建立一个新的线程,然鹅新建线程的开销是很大的(每个线程默认情况下会占用1MB的内存空间,当然你愿意的话可以用-Xss来调小点),更不要说线程切换带来的开销了 为了节省开销,程序员玩出了很多花样。 最常用的是线程池(线程复用,但是完全无法处理阻塞调用的问题...

使用vscode快速建立vue模板

当我们希望每次新建.vue文件后,vscode能够根据配置,自动生成我们想要的内容。 打开vscode编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索框,我们输入vue,将代码ctrl+c 到vue-html.json { "Print to console": { "prefix": "vue",...

转:通过 Visual Studio 对 SQL Server 中的存储过程设置断点并调试

‍执行会在断点处暂停,此时,我们可以查看并更改存储过程的参数值,逐步地调试其各条语句,就像我们在步骤1 中所做的那样。   在我们可以对应用程序调用的存储过程进行调试之前,首先要指示ASP.NET web 应用程序与SQL Server 调试器相集成。首先,在 Solution Explorer 中右键单击网站名称(ASPNET_Data_Tutorial...