在VSCode中调试其他软件执行的python文件

news2024/12/24 21:47:22

在VSCode中调试其他软件执行的python文件

0. 实际场景

我有一段python代码想在Metashape中运行,但是又想在中间某一步停下来查看变量值。由于Metashape的python环境不容易在vscode中配置,所以直接用vscode调试单个文件的方式无法实现这个想法。还好,通过Python Debugger插件和在代码中使用debugpy库,可以得到一种新的调试方式,下面介绍详细步骤。

1. 在VSCode中安装插件Python Debugger

在这里插入图片描述

2. 配置launch.json

打开要执行的python文件所在文件夹,配置调试方式:
点击下图所示的“创建launch.json文件”:
在这里插入图片描述
vscode的中上部弹出菜单:
在这里插入图片描述
选择“Python Debugger”,弹出调试配置选项菜单:

在这里插入图片描述
选择“远程附加”,然后依次输入远程主机ip(默认为localhost,代表本机)和端口号(默认5678,也可以改为其他值):

在这里插入图片描述
在这里插入图片描述
完成后,在.vscode目录下自动生成了调试配置文件launch.json,内容如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python 调试程序: 远程附加",
            "type": "debugpy",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ]
        }
    ]
}

这条配置的意思是,将调试器附加到localhost:5678端口。

为了使断点功能正常工作,我们还需要修改上面的json内容

  1. "pathMappings"属性在本机调试时无需设置,因此应删去;
  2. 同时为了这个调试配置好记,把"name"属性的值改为"Python本机端口附加调试"

修改后的launch.json如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python本机端口附加调试",
            "type": "debugpy",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            }
        }
    ]
}

3. 修改代码

调试配置已经完成,接下来就是让代码监听localhost:5678端口。

首先给出修改前的python代码:

import os
import numpy as np


if __name__=='__main__':   
    a = np.array([0,0,1,1])
    b = a*2
    c=a+b
    print(c)

想让代码中途停下来,不仅要让代码监听localhost:5678端口,还需要调用debugpy.breakpoint()

import os
import debugpy
if __name__=='__main__':
    if debugpy.is_client_connected() is False:##### 防止重复listen
        debugpy.listen(("localhost", 5678))#####
        debugpy.wait_for_client()#####
    print('wait_for_client called')
    debugpy.breakpoint()#####
    a = np.array([0,0,1,1])
    b = a*2
    c=a+b
    print(c)

在修改过的代码中,

    if debugpy.is_client_connected() is False:##### 防止重复listen
        debugpy.listen(("localhost", 5678))#####
        debugpy.wait_for_client()#####

用于让debugpy监听本机5678端口,并且等待客户端(也就是VSCode的Python Debugger)连接;
连接上调试器后,python继续往下执行代码,直到遇到debugpy.breakpoint()语句暂停执行,在VSCode中停下。此时便可查看各变量名,并且开始单步调试。

4. 运行代码,启动Debugger

完成2、3两步配置之后,先在Metashape中运行python脚本,再在VSCode中按配置的调试信息启动调试器,即可。
代码执行在debugpy.breakpoint()后一句暂停。

大意的同学可能会遇到如下图所示的问题:尝试设置断点发现,本应是红色实心圆的断点标志成了空心圆。也就是说,无法在目标行单击设置断点在这里插入图片描述
这是由于,launch.json中默认生成的"pathMappings"属性还没有删去。删掉之后再运行,即可解决问题。

或者,实在不愿意删去这个属性,那就把"localRoot"和"remoteRoot"改成正确的路径,也可以解决问题。

            "pathMappings": [
                {
                    "localRoot": "本地路径",
                    "remoteRoot": "远程路径"
                }
            ]

这个属性实际上在Docker容器代码调试和远程调试中非常有用。

5.参考

VSCode官方文档——Debugging
debugpy代码仓库
调试在容器中运行的python代码

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

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

相关文章

hanoi塔

hanoi塔问题: 1.规则:一次移动一个盘子,小盘子压大盘子上面,有A、B、C三个柱子,A是起始放盘子的柱子,B是中间可以借助的柱子,C是最后放盘子的位置 2.简单思路: 如果有1个盘子&…

2024高级卫生职称考试报名时间汇总

20地报名时间汇总,其他时间安排见图 上海:4.23-5.24 黑龙江:4.23-5.24 陕西:4.23-5.24 重庆:4.23-5.24 浙江:4.23-5.24 20地报名时间汇总 甘肃:4.23-5.24 江西:4.28-5.10 河北&#…

locust2.0+教程:016 - 结合ssh压测shell命令

简介:Locust是一个Python编写的开源性能测试工具,它可以通过编写Python代码来模拟用户行为并进行压力测试。虽然Locust本身不直接支持对shell或者SSH进行压测,但可以编写自定义的插件或者使用第三方库来实现这样的功能。如果想要通过SSH进行压…

03-JAVA设计模式-备忘录模式

备忘录模式 什么是备忘录模式 Java中的备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将对象恢复到原先保存的状态…

迪拜之行回顾:CESS 的 DePIN 创新之旅

迪拜最近是一个关键热词,成为了一系列 Web3 和加密活动的中心,吸引了行业领导者、创新者和爱好者,探索区块链和去中心化技术的最新发展。从 4 月中旬,一系列行业会议和活动陆续举行,吸引了一众与会者。然而暴雨积水又成…

iframe实现pdf预览,并使用pdf.js修改内嵌标题,解决乱码问题

项目中遇到文件预览功能,并且需要可以打印文件.下插件对于内网来说有点麻烦,正好iframe预览比较简单,且自带下载打印等功能按钮. 问题在于左上方的文件名乱码,网上找了一圈没有看到解决的,要么就是要收费要会员(ztmgs),要么直接说这东西改不了. 使用: 1.引入 PDF.js 库&…

OpenCV实现霍夫变换

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 如何实现边缘检测器 下一篇 :OpenCV 实现霍夫圆变换 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 HoughLines()和 HoughLinesP()检测图像中的线条。…

云赛道---人工智能概述(重点总结)决赛准备

1、人工智能的一个比较流行的定义,也是该领域较早的定义,是由约翰 麦卡锡( John McCarthy| )在 1956 年的达特矛斯会议( Dartmouth Conference )上提出的:人工 智能就是要让机器的行为看起来…

书生·浦语 大模型(学习笔记-5)XTuner 微调 LLM:1.8B、多模态、Agent

目录 一:两种微调 二、数据的一生 三、微调方案 四、XTuner 五、InternLM2 1.8B模型(相关知识) 一:两种微调 增量与训练和指令微调的区别 二、数据的一生 原始数据转换为标准格式数据 添加对话模板,直接调用即可…

【Ajax-异步刷新技术】什么是Ajax之续章 !

文章目录 Ajax第五章1、layui的后台布局2、layui的数据表格1、在jsp页面中编写table2、在页面中引入文件3、编写代码4、参照文档修改表格属性 **3、最终效果** 第六章1、继续第五章内容1、layui组件2、添加数据3、查看数据4、修改数据5、删除数据 2、批量删除核心 3、数据表格重…

C++ 核心编程 - 内存分区模型

文章目录 1.1 程序运行前1.2 程序运行后1.3 new 操作符 C 程序在执行时,将内存大致划分为 4个区域: 代码区:存放函数体的二进制代码,由操作系统进行管理;全局区:存放全局变量和静态变量以及常量&#xff1…

新媒体运营-----短视频运营-----PR视频剪辑----软件基础

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1.1 PR软件重置与初始化设置1.2 新建项目及序列设置1.3 PR工作区的管理方法1.4 导入4K超高清视频并与ME配合工作1…

Unity 按下Play键后,Scene View里面一切正常,但是Game View中什么都没有 -- Camera Clear Flags的设置

问题如下所示。 最先遇到这个问题是我想用Unity开发一个VR 360-degree Image Viewer。在Scene View中可以看到球体,但是Game View什么都看不到。最后找到的原因是,我使用的shader是Skybox/Panorama, 需要把Main Camera的Clear Flags设置成Do…

FPGA实现AXI4总线的读写_如何写axi4逻辑

FPGA实现AXI4总线的读写_如何写axi4逻辑 一、AXI4 接口描述 通道信号源信号描述全局信号aclk主机全局时钟aresetn主机全局复位,低有效写通道地址与控制信号通道M_AXI_WR_awid[3:0]主机写地址ID,用来标志一组写信号M_AXI_WR_awaddr[31:0]主机写地址&…

mongodb使用debezium

前置 服务器上需要安装jdk11 jdk下载地址 kafka安装 官网下载地址 安装教程 debezium 安装 运行 Debezium 连接器需要 Java 11 或更高版本 Debezium 并不是一个独立的软件,而是很多个 Kafka 连接器的总称。这些 Kafka 连接器分别对应不同的数据库,…

6、ES单机设置用户名密码、集群设置用户名密码、es-head登录、如何去掉密码

目录 一、ES单节点密码配置1、修改配置文件2、 重启es服务3,执行修改密码命令4、访问服务 二、ES集群密码配置1、确定主节点2、生成elastic-stack-ca.p123、生成elastic-certificates.p124、修改配置文件并重启集群5、进行密码配置6、验证 三、es-head登录增加密码的…

串口调速小车1

1. 让小车动起来 智能小车1-智能小车的初认识_void motor-CSDN博客 接线 B-1A -- PB0 B-1B -- PB1 A-1A -- PB2 A-1B -- PB10 CubeMx 1.常规配置 SYS->Debug->Serial Wire RCC->High Speed Clock(HSE)->Crystal/Ceramic Resonator 时钟树HSE、PLLCLK打开…

【Webgl_glslThreejs】搬运分享shader_飘落心形

来源网站 https://www.shadertoy.com/view/4sccWr效果预览 代码演示 将shadertory上的代码转成了threejs可以直接用的代码,引入文件的material,并在创建mesh或已有物体上使用material即可,使用时请注意uv对齐。 import { DoubleSide, Shad…

ROM修改进阶教程------如何去除安卓机型系统的开机向导 几种操作步骤解析

在和很多工作室定制化系统中。手机在第一次启动的时候系统都会进入设置向导,虽然可以设置手机的基本配置。但有很多客户需要去除手机的开机向导来缩短开机时间。确保手机直接进入工作状态。那么今天的教程针去除对开机向导的几种方法做个解析。机型很多版本不同。操作也有不同…

【产品经理修炼之道】- 从需求到功能的转化过程

产品经理的最大作用是将需求转化为产品或者功能,从需求到功能,会经历哪些过程?本文总结了从需求到功能的转化过程,希望对你进一步了解有所帮助。 “大部分的产品经理特别是数字化产品经理其核心价值就是如何去解决如何把需求转化为…