IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【自动化运维新手村】番外-IDE调试 -> 正文阅读

[开发工具]【自动化运维新手村】番外-IDE调试

【摘要】

上一篇番外中我们讲解了调试对于编程的重要性,并且介绍了Python中的pdb工具包,可以帮我们在没有IDE的环境下进行代码调试。

pdb终归是基于命令行交互式的,对于刚接触编程的朋友来说并不友好,并且在日常开发中,如果代码架构略微复杂,或者是引用的第三方库,不太了解具体的实现细节,那么pdb就不是最合适的调试方法了。

那么今天我们就讲解一下最容易上手且很直观的IDE调试方法

【IDE】

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序。

一般包括代码编辑器、编译器、调试器和图形用户界面等工具。

集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。

目前Python语言中使用最常用的就是PycharmVSCode

今天我们就详细讲解一下如何使用Pycharm进行调试

【Pycharm】

IDE除了显而易见的代码补全功能以外,清晰便捷的Debug功能也是非常重要的,如果你还是只用Pycharm来编辑代码,那可就有点儿暴殄天物了。

这次仍然用pdb篇中的示例代码为大家讲解

import sys

def foo(num):
    ret = []
    for i in range(num):
        tmp = i ** 2
        ret.append(tmp)
    return ret

if __name__ == "__main__":
    args = sys.argv
    result = foo(int(args[1]))
    print(args)

在Pycharm中展示如下图

在这里插入图片描述

关于Pycharm的其他细节使用不是今天这篇文章的主题,我们就略过不谈,单独了解一下Pycharm的调试功能

一、开启调试

Pycharm开启调试有三种方法

  1. 当文件中有if __name__ == "__main__":时,Pycharm会识别到,并将该行标识为程序入口,用一个绿色的三角形表示。

左键单击该三角形会有一个下拉框,第二个选项Debug 'main'就是开启调试的按钮

在这里插入图片描述

  1. 在文件空白处右键单击可以弹出下拉选相框,其中同样会有Debug 'main'按钮

在这里插入图片描述

  1. 工具栏中有一个虫子符号的按钮,同样也是Debug 'main'的按钮

在这里插入图片描述

二、断点调试

  1. 右侧黄色框中点击可以为指定行添加断点,添加断点后程序会执行到断点所在行中断,断点所在行为将要执行的下一行代码

在这里插入图片描述

  1. 我们已经在12行添加了一个断点,现在采取上述任意一种方式开启调试后,Pycharm页面如下图

在这里插入图片描述

页面中有几大重要的部分已经通过红框和注释标识出来,我分别对其做一下详细的解释:

变量值

进行调试一个最主要的目的就是要知道程序运行过程中,定义的变量是如何变化的,他们的值或者类型分别是什么?

Pycharm会在程序代码每行的行尾空白处表明该变量的当前值;

页面下方的Variables框中则会显示更为详细的变量信息,包括变量值,变量具有的属性和方法等;

并且Variables框的左侧有一列按钮可以对变量进行其他操作,最常用的就是添加要Watch的变量,比如我想查看args的长度,就可以点击黄色框中的加号,输入len(args)即可, 如下图

在这里插入图片描述

调试窗口/输出窗口:

开启调试后默认页面就处在Debugger调试窗口下,但如果程序中存在打印输出的内容,则需要点击Console按钮,切换到输出窗口才可以看到输出内容。

调试操作按钮

调试时最主要的几个按钮如下图所示

在这里插入图片描述

调试按钮快捷键含义
Step OverF8步进:执行下一行代码
Step IntoF7步入:执行下一行代码,如果下一行为函数则进入函数
Step Into MyCodeAlt+Shift+F7(Option+Shift+F7)步入:与Step Into功能类似,但只会进入到自己编写的函数中
Step OutShift+F8步出:运行断点后的所有代码,当前如果在函数中,则会返回到上一层
Run to CursorAlt+F9执行到光标:一直执行到光标所在行,当前在循环中时,点击一次会执行一次循环
  1. 继续调试,在12行断点处点击Step Over按钮,会发现程序抛出了异常,如下图:

在这里插入图片描述

这个错误的含义是数组的下标超出了范围,从上一步可以看出args = ['./main.py']args的长度只有1,但12行却要访问args[1],表示访问args的第二个元素,很明显会发生数组越界,所以程序抛出了异常。

这里要求我们通过命令行传入一个参数,但我们目前是直接使用Pycharm的调试按钮启动的程序,如何输入自定义参数呢?如下图

在这里插入图片描述
在这里插入图片描述

上图中的红框处可以输入参数,相当于命令行执行时python main.py后面的内容,所以这里输入3,等价于python main.py 3

  1. 步入函数,现在输入参数后就可以在12行处点击Step Into或者Step Into MyCode按钮进入函数中

在这里插入图片描述

一直点击Step Over一行一行执行函数,可以看到当前行执行到第7行,IDE显示第一次循环的i = 0, 计算得到的tmp = 0

在这里插入图片描述

直接点击Run to Cursor,可以执行代码到光标处,因为当前代码执行到了第7行,光标默认位于此处,所以点击Run to Cursor可以直接执行下一次循环到此处,不用点击多次Step Over。

在这里插入图片描述

当想要直接结束所处函数的执行,可以点击Step Out,便会执行完函数并返回至上一层

在这里插入图片描述

如果存在多个断点的情况,可以直接点击左下角框选的按钮,则会跳转到下一个最近的断点处,如果当前断点之后没有断点则会直接运行完剩余程序。

在这里插入图片描述

【Flask示例】

前几天有个朋友提了一个问题,正好可以来为大家演示一下,当不了解程序内部实现时如何使用Pycharm进行代码调试

from flask import Flask


app = Flask(__name__)

if __name__ == "__main__":
    app.run()

上面的代码是一段最为简单的启动Flask项目的示例代码

Tips: Flask是使用Python编写的轻量级Web框架,马上我们会出相应的专题

第二行app = Flask(__name__)的作用是创建一个应用对象实例,app是Flask的实例,Flask接收包或者模块的名字作为参数,但一般都是传递(__name__),让flask.helpers.get_root_path函数通过传入这个名字确定程序的根目录,以便获得静态文件和模板文件的目录。

现在我们使用代码调试试图看看Flask是如何根据__name__确定程序根目录的。

在app初始化处加入断点,然后点击Debug开启调试

在这里插入图片描述

现在点击Step Into跳进Flask()函数中

在这里插入图片描述

由上图可以看出,Flask类继承了Scaffold类,并且我们当前处于super().__init__()这一行,这一行表示对父类进行初始化,所以再次点击Step Into步入父类中(由于此处函数参数过长,代码存在换行,所以需要点击多次步入按钮,直到跳入父类中即可)。

在这里插入图片描述

由上图可知,现在已经进入到Flask的父类Scaffold的初始化函数中,并且我又点击了几次Step Over,直到运行到上图所在行。

这里就是对项目根目录的确定逻辑,由于我们在初始化app时没有传入root_path参数,所以当前root_path为None,这样就会用到flask.helpers.get_root_path()根据传入的import_name来确定项目根目录。而import_name就是初始化类时传入的__name__。至于get_root_path()函数中具体如何实现的就留给大家自己探索。

【总结】

IDE的调试功能十分强大,毋庸置疑,如果能够合理运用,一定会在学习之路上让大家事半功倍,VSCode的调试方法我这里没有提到,如果有使用VSCode的朋友想了解它的调试方法,也可以在公众号给我留言,我也会出一篇详细的讲解。


欢迎大家添加我的个人公众号【Python玩转自动化运维】加入读者交流群,获取更多干货内容
在这里插入图片描述

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:12:52  更:2022-01-12 00:13:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 12:20:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计