Pycharm Debug调试(纯干货)

本文转自:https://blog.csdn.net/qq_33472146/article/details/90606359

使用Debug调试代码
1.打断点
一个断点标记了一个代码行,当Pycharm运行到该行代码时会将程序暂时挂起。
注意断点会将对应的代码行标记为红色,取消断点的操作也很简单,在同样位置再次单击即可。
如图所示,打了两个断点

 

 

当你将鼠标指针悬停在断点上方时,Pycharm会显示断点的关键信息,行号以及脚本属性,如果你希望更改该断点的属性,右击断点:

 

 

可以尝试对断点属性进行个性化更改,然后观察图标的变化。
2.代码调试
我们有几种方法来debug程序
第一种:通过鼠标右击代码处,可以来debug程序

 

 

第二种:可以通过点击这个小虫子的图标来进行debug

 

 

接下来会Pycharm会执行以下操作:
(1)PyCharm开始运行,并在断点处暂停
(2)断点所在代码行变蓝,意味着Pycharm程序进程已经到达断点处,但尚未执行断点所标记的代码。
(3)Debug tool window窗口出现,显示当前重要调试信息,并允许用户对调试进程进行更改。
在这里介绍一下debug窗口几个图标分别代表的意思

 

 

这里一排七个坐标的意思分别是
1.show execution point (F10) 显示当前所有断点
2.step over(F8) 单步调试。
若函数A内存在子函数a时,不会进入子函数a内执行单步调试,而是把子函数a当作一个整体,一步执行
3.step into(F7) 单步调试。
若函数A内存在子函数a时,会进入子函数a内执行单步调试。
4.step into my code(Alt + Shift +F7) 执行下一行但忽略libraries(导入库的语句)
5.force step into(Alt + Shift +F7) 执行下一行忽略lib和构造对象等
6.step out(Shift+F8)当目前执行在子函数a中时,选择该调试操作可以直接跳出子函数a,而不用继续执行子函数a中的剩余代码。并返回上一层函数。
7.run to cursor(Alt +F9) 直接跳到下一个断点
然后接着来看变量查看器
在调试过程中观察变量的状态。我们需要对其设置一个查看器。在Watches窗口中,单击加号,输入期望查看的变量名称,例如这里输入delay,然后回车。我试了三个变量,这里我们看到这三个变量目前都是没被定义的,我们可以在控制台里给它定义,也可以通过执行下一步,利用代码中的赋值来定义。
*注意:*这个眼镜模样的图案是watch窗口(我当时可是找了半天…,网上的都是一些老版本的介绍的watch窗口,=.=)

 

 

可以通过点击这个图标

 

 

将这两个窗口连在一起查看

 

 

OK,接下来我们来看控制台窗口
Console窗口的工作模式:
  为什么需要用到Console窗口呢?当我们需要查看程序给出的错误信息,或者进行一些额外的临时运算时,就需要在这个窗口里面进行。
单击左侧工具栏中的命令符按钮,显示Python的命令提示符(在这里,问题又来了,新版的pycharm的那个图标又换了,而且还隐藏的很深,这是怕别人找到了吗。。。)
经过探索,发现在这=.=

 

 

点击这个,即可显示python的命令提示符

 

 

在这里做个小测试,这里可以直接编译python代码,执行一些python命令。


介绍完这些,开始进入正式调试代码,我用的小例子的代码如下:

import threading
import time

def get_thread_name():
  t = threading.current_thread()
  return t.name

def print_time(delay):
  """Define a function for the thread."""
  thread_name=get_thread_name()
  count = 0
  while count < 8:
    time.sleep(delay)
    count += 1
    print("%s:%s" % (thread_name, time.ctime(time.time())))

t1 = threading.Thread(target=print_time, args=(1,))
t2 = threading.Thread(target=print_time, args=(2,))
t1.start()
t2.start()
t1.join()
t2.join()

调试开始,并且在第一个断点处停止,断点所在的行变为蓝色,说明Pycharm已经击中了这个断点,但尚未执行这行代码。

通过断点调试,在第一个断点处,进行下一步操作,即可得到变量的值的变化情况

 

 

最后在介绍一下,可能有时候debug并不能正常进行,控制台会输出如下信息:

 

 

程序本身应该没有错误,就是不能正常debug。
下面记录几种解决方式:
一、关闭Pycharm,删除工程目录下的.idea文件夹并重启。
二、删除所有的断点。可以点击下图所示的两个叠在一起的红色原点进行操作。
三、点击Pycharm的File>>Invalidate Caches / Restart…,然后选择Invalidate and Restart。这个操作清空了项目中的缓存信息。
四、重建整个工程并重新配置。
这四种方法可能会解决这个问题,我试了第三种,然后第二种应该也是可以的,第一种和第四种小心尝试。

其实之前经常用print来进行调试,这是一种粗暴的方法,可以直接将错误信息打印出来。
嗯,经过一番折腾,也算是对pycharm的debug调试有了一些认识,可能还有一些其它的未掌握的技巧,留着以后慢慢探索吧。

posted @ 2021-10-10 22:34  八戒不爱吃西瓜  阅读(2622)  评论(0编辑  收藏  举报