Visual Studio Code基础:使用debugpy调试python程序

news2024/11/26 1:16:34

相关阅读

VS codeicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm=1001.2014.3001.5482


一、安装调试器插件 

        在VS code中可以很轻松地调试Python程序,首先需要安装Python调试器插件,如图1所示。

图1 安装调试器插件

        Python Debugger是用于VS code的调试扩展,通过debugpy提供强大的调试功能,如设置断点、单步执行和变量检查,支持脚本、Web 应用、远程进程和多线程程序等。

二、简单调试

        使用下面的几种方式,即可调试当前光标所在的文件,即变量${file}表示的文件(当有多个文件存在时,这很重要)。

1. 使用运行选项卡

        点击“运行”选项卡下的“启动调试”。

图2 运行选项卡

        当VS code第一次进行调试时,会要求用户选择调试器,如图3所示。

图3 选择调试器

        当一个文件第一次被调试时,会要求用户选择调试配置,这里选择“Python文件”就行,如图4所示。

图4 选择调试配置

2.  使用快捷键F5

        默认情况下,快捷键F5也可以启动调试。

3. 使用右上角的下拉菜单

        点击右上角的下拉菜单中的“Python 调试程序: 调试 Python 文件”,如图5所示。

图5 下拉菜单

       

4. 使用左选项栏

        打开左侧的“运行与调试”选项栏(或使用Ctrl+Shift+D快捷键),点击“运行与调试”按钮,如图6所示。

图6 调试与运行

三、添加断点

        在开始调试前,首先需要设置断点,否则程序会持续运行就像非调试运行那样,本节将以例1所示的Python文件为例进行说明。

# 例1
d = 1
class A:
    a = 1
    def __init__(self):
        self.b = 2
    def f(self):
        c = 3
        print(d, self.a, self.b, c)


print(d)
a = A()
a.f()

        将光标移动到需要设置断点的行左侧,此时会有一个透明红点提示,如图7所示,此时单击鼠标左键就可添加断点。

图7 断点提示

         将光标移动到需要设置断点的行左侧,单击鼠标右键在菜单中选择“添加断点”也是可行的,如图8所示。

图8 右击菜单

        断点设置完成后以一个红点表示,如图9所示。

图9 成功设置断点

        删除已设置的断点很容易,只需要将光标移动到断点上,单击鼠标左键或者单击鼠标右键在菜单中选择“删除断点”,如图10所示。

图10 删除断点

四、调试窗口

        现在可以使用第三节说明的任意一种方式开始调试了,当程序因为断点而挂起时,如图11所示。

图11 调试界面

        首先来看调试工作栏,其中有六个按钮可以点击,分别是继续(F5)、逐过程(F10)、单步调试(F11)、单步跳出(Shift+F11)、重启(Ctrl+Shift+F5)、停止(Shift+F5),如图12所示。

图12 调试工具栏

        在“运行”选项卡下也可以找到这些功能,如图13所示。

图13 运行选项卡

        下面解释这五个按钮的功能。

  • 继续(F5):继续执行程序,直到下一个断点或程序结束。
  • 逐过程(F10):逐行执行当前行的代码,但在遇见函数调用时不会进入其中,而是将函数内的代码全部执行完后停止在调用函数行的下一行。
  • 单步调试(F11):逐行执行当前行的代码,如果有函数则会进入。
  • 单步跳出(Shift+F11):从当前函数返回,停止在调用函数行的下一行。
  • 重启(Ctrl+Shift+F5):重新启动调试,重新加载代码并从头开始执行。
  • 停止(Shift+F5):停止调试,结束程序执行。

        左侧的“运行与调试”选项栏中可以观察变量(我更愿意成为标识符)的值,它分为两类,Locals和Globals,如图14所示。

图14 变量观察窗口

        Locals中显示的不只是当前行所在的作用域中的标识符,而是当前行能访问到的除了全局作用域外所有作用域中的标识符(图15是一个能证明它的例子);Globals中显示的是当前文件的全局作用域中的标识符。special variables指的是首尾是双下划线的特殊标识符(魔术方法或特殊属性),function variables指的是函数标识符,class variables指的是类标识符。

图15 Locals窗口

        其实变量观察窗口中显示出标识符的值,是魔术方法__repr__()返回的值(其实是个字符串),在没自定义魔术方法__expr__()时,也就是使用print打印标识符时输出的值,如例2所示,print函数打印除了对象的所属类和地址。

# 例2
d = 1
class A:
    a = 1
    def __init__(self):
        self.b = 2
    def f(self):
        c = 3
        print(self.__repr__())  # 输出:<__main__.A object at 0x0000021B7F8B7F90>
        print(self)             # 输出:<__main__.A object at 0x0000021B7F8B7F90>
        print(d, self.a, self.b, c)


print(d)
a = A()
a.f()

        因此可以自定义__expr__()方法,从而控制变量观察窗口的值,如例3所示(不是所有对象都可以,比如引用整数对象的标识符d就不行)。

# 例3
d = 1
class A:
    a = 1
    def __init__(self):
        self.b = 2
    def f(self):
        c = 3
        print(self.__repr__())  # 输出:This is class A
        print(self)             # 输出:This is class A
        print(d, self.a, self.b, c)
        
    def __repr__(self):
        return 'This is class A'


print(d)
a = A()
a.f()

        此时的调试窗口如图16所示,可以看到self标识符显示的值变成了自定义的字符串。 

图16 自定义调试窗口的显示值

 

五、进阶调试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在当前网络环境中查看所有IPv4与Mac地址的方法

在powershell界面中&#xff1a; # 获取并显示所有网络接口的MAC地址和IPv4地址 Get-NetAdapter | Select-Object -Property Name, MacAddress, Status Get-NetAdapter | Get-NetIPAddress -AddressFamily IPv4 | Select-Object -Property InterfaceAlias, IPAddress, PrefixL…

【JavaScript】JavaScript开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

让AI像人一样思考和使用工具,reAct机制详解

reAct机制详解 reAct是什么reAct的关键要素reAct的思维过程reAct的代码实现查看效果引入依赖&#xff0c;定义模型定义相关工具集合工具创建代理启动测试完整代码 思考 reAct是什么 reAct的核心思想是将**推理&#xff08;Reasoning&#xff09;和行动&#xff08;Acting&…

SpringBoot3项目中Knife4j的配置与使用

引言 Knife4j 是基于 Swagger 的增强版API文档生成工具&#xff0c;提供美观且功能丰富的API文档界面。 官网&#xff1a;Knife4j 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j (xiaominfo.com) 配置 基于SpringBoot3进行配置&#xff0c;有以下注意点&#xff1…

Oracle云主机申请和使用教程:从注册到SSH连接的全过程

今天我要和大家分享如何成功申请Oracle云主机,并进行基本的配置和使用。我知道很多同行的朋友在申请Oracle云主机时都遇到了困难&#xff08;疑惑abc错误&#xff09;,可能试了很多次都没有成功。现总结一下这些年来的一些注册流程经验&#xff0c;或许你们也能成功申请到自己的…

opencv-rust 系列2: camera_calibration

opencv-rust 系列2: camera_calibration 前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 说明: camera_calibration.rs是opencv-rust自带的示例, 在examples目录中可以找到,我增加了一些中文注释如下.如需运行可以在项目根目录执行命…

Qt第三课 ----------显示类的控件属性

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

从0开始深度学习(8)——softmax回归

1 分类问题 深度学习从大方向上来说&#xff0c;就是回归预测和分类问题。 假设输入一个 2 ∗ 2 2*2 2∗2的灰度图像&#xff0c;可能属于“鸡、猫、狗”三个类别中的一个&#xff0c;那如何在计算机中表示标签呢&#xff1f;最常见的想法是 y { 1 , 2 , 3 } y \{1,2,3\} y{…

现金1.8kw, 年入150w, 财务不自由...

他的生活状态无疑是许多人梦寐以求的。拥有两套无贷款的房产&#xff0c;家庭和睦&#xff0c;两台车价值约50万元。现金资产高达1800万元&#xff0c;家庭年收入约150万元&#xff0c;职业稳定&#xff0c;属于中层管理阶层。 重要的是&#xff0c;孩子们的成绩优异&#xff0…

ListView的Items绑定和comboBox和CheckBox组合使用实现复选框的功能

为 ListView 控件的内容指定视图模式的方法&#xff0c;参考官方文档。 ComboBox 样式和模板 案例说明&#xff1a;通过checkBox和ComboBox的组合方式实现下拉窗口的多选方式&#xff0c;同时说明了ListView中Items项目的两种绑定方式. 示例&#xff1a; 设计样式 Xaml代码…

机器学习 | 特征选择如何减少过拟合?

在快速发展的机器学习领域&#xff0c;精确模型的开发对于预测性能至关重要。过度拟合的可能性&#xff0c;即模型除了数据中的潜在模式外&#xff0c;还拾取训练集特有的噪声和振荡&#xff0c;这是一个固有的问题。特征选择作为一种有效的抗过拟合武器&#xff0c;为提高模型…

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时&#xff0c;经常用到模板匹配&#xff0c;opencv自带的图像模板匹配好用&#xff0c;易用&#xff0c;高效&#xff0c;稳定&#xff0c;且有多种匹配计算方式。 具体示例如下&#xff1a; 模板图&#xff1a; 待搜索图&#xff1a; 具体实现代码…

苹果正式宣布:iPhone全面开放近场通信(Near Field Communication,简称NFC)【使用安全元件提供app内NFC数据交换功能】

文章目录 引言I iPhone的NFC功能开发者用户数据交换的体验革新安全与隐私II 知识扩展:近场通信(NFC)技术钱包NFC开关打开读取NFC标签(NFC tags )权限demo引言 2014年iPhone 6开始,苹果首次引入了NFC功能,但最初只允许自家的Apple Pay进行移动支付。慢慢地适配了交通卡,增…

基于go开发的终端版即时通信系统(c-s架构)

项目架构图 类似一个聊天室一样 整体是一个客户端和服务端之间的并发多线程网络通信&#xff0c;效果可以翻到最后面看。 为了巩固基础的项目练手所以分为9个阶段进行迭代开发 版本⼀&#xff1a;构建基础Server 新建一个文件夹就叫golang-IM_system 第一阶段先将server的大…

沈阳化工大学第十一届程序设计沈阳区竞赛:凿冰 Action(博弈论,思维)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 北极探险队有新收获了&#xff01;&#xff01;&#xff01; 北极探险队发现了NNN条长度不一的冰柱&#xff0c;由于冰柱里封存有价值的生物&#xff0c;现在需要两名生物学家小A和小…

TON生态小游戏开发:推广、经济模型与UI设计的建设指南

随着区块链技术的快速发展&#xff0c;基于区块链的Web3游戏正引领行业变革。而TON生态小游戏&#xff0c;借助Telegram庞大的用户基础和TON&#xff08;The Open Network&#xff09;链上技术&#xff0c;已成为这一领域的明星之一。国内外开发者正迅速涌入&#xff0c;开发和…

如何在算家云搭建Kolors(图像生成)

一、模型介绍 Kolors 是快手 Kolors 团队基于潜在扩散的大规模文本转图片生成模型。经过数十亿个文本-图片对的训练&#xff0c;Kolors 在视觉质量、复杂语义准确性和中英文文本渲染方面均比开源和闭源模型具有显著优势。此外&#xff0c;Kolors 支持中英文输入&#xff0c;在…

C语言基础语法——类型转换

数据有不同的类型&#xff0c;不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种&#xff1a; 自动类型转换&#xff08;隐式转换&#xff09;&#xff1a;遵循一定的规则&#xff0c;由编译系统自动完成强制类型转换&#xff08;显示转换&#xff09;…

http协议概述与状态码

目录 1.HTTP概述 1.1请求报文起始行与开头 ​1.2响应报文起始行 ​ 1.3响应报文开头 ​ 2.http状态协议码 1.HTTP概述 默认端口 80 HTTP超文本传输与协议: 数据请求和响应 传输:将网站的数据传递给用户 超文本:图片 视频等 请求request:打开网站 访问网站 响应r…

Python数据分析-垃圾邮件分类

一、研究背景 随着电子通信技术的飞速发展&#xff0c;电子邮件已经成为人们日常工作和生活中不可或缺的一部分。然而&#xff0c;伴随着这一趋势&#xff0c;垃圾邮件&#xff08;Spam&#xff09;的数量也在急剧增加。垃圾邮件不仅会占用用户的邮箱空间&#xff0c;还可能含…