当前位置: 首页 > news >正文

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

相关阅读

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所示。

图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 = 1def __init__(self):self.b = 2def f(self):c = 3print(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 = 1def __init__(self):self.b = 2def f(self):c = 3print(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 = 1def __init__(self):self.b = 2def f(self):c = 3print(self.__repr__())  # 输出:This is class Aprint(self)             # 输出:This is class Aprint(d, self.a, self.b, c)def __repr__(self):return 'This is class A'print(d)
a = A()
a.f()

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

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

五、进阶调试

        如图6中的提示,如果需要自定义运行和调试,可以首先打开文件夹, 点击“文件”选项卡下的“打开文件夹”,如图17所示。

图17 打开文件夹

        接着打开左侧的“运行与调试”选项栏(或使用Ctrl+Shift+D快捷键),点击“创建 lauch.json 文件”,如图18所示。 

图18 创建lauch.json文件

        或者直接在“运行”选项卡下点击“添加配置...”,如图19所示。

图19 添加配置

        接着会有图3和图4所示的选择调试器和选择调试配置,还是按照之前所说的进行选择。在打开的文件夹中,会创建一个.vscode子文件夹并在其中创建launch.json文件,如图20所示。

图20 新建的lauch.json

        该launch.json是一个调试的配置文件,控制.vscode子文件夹所在的文件夹,其中可以包含多个配置(图20中只有一个),每个配置由多个属性决定,下面将说明这些属性的作用。

        以下三个属性是必须的。

  • type:调试器的类型。例如,本文中的调试器是debugpy。
  • request:调试的模式,有两种模式可供选择。
    • launch:启动程序(由program属性决定)并调试。
    • 将程序附加到一个正在运行的进程中进行调试。
  • name:配置的名字,显示在“运行与调试”选项栏。

        下面的属性是可选项。

  • persentation:使用order、group和hidden属性来定义调试配置的显示。
  • preLaunchTask:定义在调试之前要运行的任务。
  • postLaunchTask:定义在调试结束时要运行的任务。
  • internalConsoleOptions:定义调试控制台的显示。
  • serverReadyAction:设置在调试时自动在浏览器打开URL。

        此外,大多数调试器插件还支持以下属性。

  • program:要运行的可执行文件或源代码的路径,例如${file}表示当前光标所在的文件的路径。
  • args:要传递给program的参数。
  • env:环境变量。
  • cwd:调试器的工作目录。默认值是${workspaceFolder},即当前工作区文件夹,对于只打开一个文件夹的情况,这就是指被打开的文件夹。对于工作区有多个文件夹的情况,指的是该.vscode文件夹所在的文件夹,如果使用${workspaceFolder:文件夹名}的格式则可以具体指定文件夹。
  • port:要附加到进程的端口。
  • stopOnEntry:是否在程序入口处断点。
  • console:指定程序输出的位置。
    • internalConsole:VS code的调试控制台。
    • integratedTerminal:VS code的集成终端。
    • externalTerminal:系统的终端。

        当.vscode文件夹中存在launch.json文件时,vscode会自动识别其中的调试配置并呈现在“运行与调试”选项栏中,如图21所示。

图21 “运行与调试”选项栏

        图6所示的“运行与调试”变成了绿色三角形,并需要在列表中选择一个配置(此时只有一个配置),第二节中提到的所有调试都将以这个配置运行。

        想要打开配置文件很容易,只需要使用“运行与调试”选项栏的齿轮或直接在“运行”选项卡下点击“打开配置”,它们会打开当前选择的配置所在的配置文件,如图22和23所示。

图22 打开配置文件

图23 打开配置文件 

        添加配置可以通过“运行与调试”选项栏的列表中的“添加配置”或“运行”选项卡下点击“添加配置”进行,它们在大部分情况下是等价的。

        除了每个文件夹可以有各自的launch.json文件,还可以在setting.json文件中添加配置,它会被所有文件夹共享,如图24所示。

图24 全局的调试设置

        此时的“运行与调试”选项栏中,如图25所示。

图25 “运行与调试”选项栏

        此时使用“运行与调试”选项栏的列表中的“添加配置”或“运行”选项卡下点击“添加配置”就有区别了。

        当工作区有多个文件夹时,使用图18所示的“创建 lauch.json 文件”,会要求选择创建配置文件的位置,如图26所示。但此时使用图19的方式,则默认指第一个文件夹。

图26 选择文件夹

        工作区的配置保存在工作区临时设置文件夹的workplace.json中(如果工作区尚未保存),如图27所示。

图27 临时保存的workplace.json文件

        如工作区已被保存,则工作区配置被保存在.code-workplace后缀的工作区文件中,如图28所示。

图28 工作区文件

相关文章:

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

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 一、安装调试器插件 在VS code中可以很轻松地调试Python程序&#xff0c;首先需要安装Python调试器插件&#xff0c;如图1所示。 图1 安装调试器插件 Python Debugge…...

超全!一文详解大型语言模型的11种微调方法

导读&#xff1a;大型预训练模型是一种在大规模语料库上预先训练的深度学习模型&#xff0c;它们可以通过在大量无标注数据上进行训练来学习通用语言表示&#xff0c;并在各种下游任务中进行微调和迁移。随着模型参数规模的扩大&#xff0c;微调和推理阶段的资源消耗也在增加。…...

C 主要函数解析

1、fseek 函数 int fseek(FILE *stream, long offset, int fromwhere); 第一个参数stream为文件指针 第二个参数offset为偏移量&#xff0c;正数表示正向偏移&#xff0c;负数表示负向偏移 第三个参数origin设定从文件的哪里开始偏移,可能取值为&#xff1a;SEEK_CUR、 SEE…...

vue3学习:数字时钟遇到的两个问题

在前端开发学习中&#xff0c;用JavaScript脚本写个数字时钟是很常见的案例&#xff0c;也没什么难度。今天有时间&#xff0c;于是就用Vue的方式来实现这个功能。原本以为是件非常容易的事&#xff0c;没想到却卡在两个问题上&#xff0c;一个问题通过别人的博文已经找到答案&…...

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)3.7-3.8

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第三周 目标检测&#xff08;Object detection&#xff09;3.7 非极大值抑制&#xff08;Non-max suppression&#xff09;3.8 Anchor Boxes 第四门课 卷积神经网络&#xff08;Convolutional…...

【Linux】最基本的字符设备驱动

前面我们介绍到怎么编译出内核模块.ko文件&#xff0c;然后还加载了这个驱动模块。但是&#xff0c;那个驱动代码还不完善&#xff0c;驱动写好后怎么在应用层使用也没有介绍。 字符设备抽象 Linux内核中将字符设备抽象成一个具体的数据结构&#xff08;struct cdev&#xff…...

利用 Llama 3.1模型 + Dify开源LLM应用开发平台,在你的Windows环境中搭建一套AI工作流

文章目录 1. 什么是Ollama&#xff1f;2. 什么是Dify&#xff1f;3. 下载Ollama4. 安装Ollama5. Ollama Model library模型库6. 本地部署Llama 3.1模型7. 安装Docker Desktop8. 使用Docker-Compose部署Dify9. 注册Dify账号10. 集成本地部署的 Llama 3.1模型11. 集成智谱AI大模型…...

Docker常用命令分享二

docker的用户组管理过程&#xff1a; 1、sudo : 可以让普通用户临时获得root用户的权限&#xff0c;来新建docker用户组 2、普通用户并没有使用sudo的权限 3、先要让root用户把testing用户加入到sudoers的授权文件中 4、sudoers的文件居然是只读的&#xff0c;先解决这个问…...

【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?

引言 受小程序camera组件预览和抽帧图像不一致的特性影响&#xff0c;一直未全功能支持全屏模式&#xff0c;详见本系列文件第四节小程序如何抽帧&#xff1b;随着插件在云上赛事、健身锻炼、AI体测、AR互动场景的深入应用&#xff0c;各开发者迫切的希望能在全屏模式下应用&am…...

[Java基础] 运算符

[Java基础] 基本数据类型 [Java基础] Java HashMap 的数据结构和底层原理 目录 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 常见面试题 Java语言支持哪些类型的运算符&#xff1f; 请解释逻辑运算符&&和&的区别? 请解释条件运…...

[001-02-018].第05节:数据类型及类型转换

我的后端学习大纲 我的Java学习大纲 1、数据类型介绍&#xff1a; 1.0.计算机存储单位&#xff1a; 1.1.基本数据类型介绍&#xff1a; a.整型&#xff1a;byte、short、int、long 1.整型包括&#xff1a;byte、short、int、long&#xff0c;可如下图方式类比记忆&#xff1…...

Netty基础

Netty基础 一级目录I/O请求基础知识Netty如何实现自己的I/O模型 网络框架的选型 Netty整体架构Netty逻辑处理架构网络通信层事件调度层服务编排层 组件关系梳理Netty源码结构 netty是目前最流行的一款高性能java网络编程框架&#xff0c;广泛使用于中间件、直播、社交、游戏等领…...

602,好友申请二:谁有最多的好友

好友申请二&#xff1a;谁有最多的好友 实现 with tmp as (selectrequester_id idfrom RequestAcceptedunion allselectaccepter_id idfrom RequestAccepted )selectid,count(*) num from tmp group by id order by num desc limit 1;...

【Matlab算法MATLAB实现的音频信号时频分析与可视化(附MATLAB完整代码)

MATLAB实现的音频信号时频分析与可视化 前言正文:时频分析实现原理代码实现代码运行结果图及说明结果图:结果说明:总结前言 音频信号的时频分析是信号处理领域中的一个重要研究方向。它允许我们同时观察信号在时间和频率域的特性,为音频处理、语音识别、音乐分析等应用提供…...

界面耻辱纪念堂--可视元素03

更多的迹象表明&#xff0c;关于在程序里使用新的动态界面元素&#xff0c;微软的态度是不确定的&#xff0c;其中一个是仅仅需要对比一下Office97 里的“Coolbars”和“标准工具条”。Coolbar 按钮直到用户指针通过的时候才成为按钮&#xff08;否则是平的&#xff09;。 工具…...

国产龙芯处理器选择迅为2K1000开发板有资料

硬件配置国产龙芯处理器&#xff0c;双核64位系统&#xff0c;板载2G DDR3内存&#xff0c;流畅运行Busybox、Buildroot、Loognix、QT5.12 系统!接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini HDMI…...

MySQL 命令(持续更新)

将 MySQL 命令结果输出到文件中 通过 k8s MySQL pod 里的客户端连接到 MySQL 服务器 kubectl exec mysql-pod -- mysql -hx.x.x.x -uroot -proot -e SELECT * FROM db.table; > result.txt通过 k8s MySQL pod 的客户端连接 MySQL 服务器&#xff0c;直接进入到 MySQL 客户端…...

Linux下Docker方式Jenkins安装和配置

一、下载&安装 Jenkins官方Docker仓库地址&#xff1a;https://hub.docker.com/r/jenkins/jenkins 从官网上可以看到&#xff0c;当前最新的稳定版本是 jenkins/jenkins:lts-jdk17。建议下在新的&#xff0c;后面依赖下不来 所以&#xff0c;我们这里&#xff0c;执行doc…...

低代码框架参考

企业管理信息系统作为一类重要的应用软件系统&#xff0c;具有自己的特点&#xff0c;主要有两个方面&#xff1a; 1. 系统规模大&#xff0c;目前市场上常见的ERP系统一般都有几千个页面。 2. 页面逻辑相似性强。经过比较可以发现&#xff0c;大部分页面具有类似的功能&…...

2024 年 9 月区块链游戏研报:行业回暖,Telegram 游戏引发热潮

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics Games Research Page 9 月份&#xff0c;区块链游戏代币的市场总值增长了 29.2%&#xff0c;达到 232 亿美元&#xff0c;日活跃用户&#xff08;DAU&#xff09;数量上升了 1…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

Centos 7 服务器部署多网站

一、准备工作 安装 Apache bash sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd创建网站目录 假设部署 2 个网站&#xff0c;目录结构如下&#xff1a; bash sudo mkdir -p /var/www/site1/html sudo mkdir -p /var/www/site2/html添加测试…...