如何在VSCode中带有参数的Debug(name、program、$file、args、pickArgs、指定虚拟环境)

0. 省流

{"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","console": "integratedTerminal","python": "/home/leovin/anaconda3/envs/wsl/bin/python","args": ["--weights","weights/yolov5s.pt","--cfg","models/yolov5s.yaml"]}]
}

其中:

  • "name":debug配置的名称(任意)
  • "program":要debug的文件("${file}" 为当前打开的文件)
  • "python":使用的虚拟环境的 Python 路径;
  • "args"
    • "args": ["参数1", "参数2", ...]:传入固定参数
    • "args: "${command:pickArgs}":运行后再填写参数,没有则直接回车

1. 问题

在使用 VSCode 进行 Debug 时,如果程序没有额外的参数要求,那我们直接在右上角点击 Debug 即可开始调试。

如果我们的程序需要传入指定的参数才能正常运行,那么直接点击右上角的 Debug 按钮是不行的。

以 YOLOv5 为例,我们想要在 Debug 的时候传入一些参数,如:

python train.py \--weights weights/yolov5s.pt \--cfg models/yolov5s.yaml \--data data/coco.yaml\--img 640 \--device 0 \--project runs/train \--name exp

2. 使用 lanuch.json 进行调试

2.1 launch.json 文件的创建

如果我们直接点击右上角的 debug 按钮,程序使用的是默认的配置,这与我们的需求不合。我们可以使用 “Python调试程序:使用 launch.json 进行调试”,如下图所示:

之后点击“添加配置”,此时 VSCode 会自动创建一个 launch.json 文件:

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Python 调试程序: 包含参数的当前文件","type": "debugpy","request": "launch","program": "${file}","console": "integratedTerminal","args": "${command:pickArgs}"}]
}

2.2 launch.json 关键字说明

关键字作用
//Json 文件的注释 (可以删除)
"version"调试配置文件的版本
"configurations"包含了所有的调试配置的数组
"name"调试配置的名称
在 VSCode 的调试侧边栏中显示,区分不同的调试配置
"type"调试器的类型
(通常是 "python" 或者 "debugpy"
"request"启动模式
"launch" 用于启动一个新的程序,而 "attach" 用于附加到已经运行的程序)
"program"要调试的程序的路径
"args"传递给程序的命令行参数的数组

2.2.1 “names” 关键字说明

"name" 关键字并不是要调试的文件的名称,而是调试配置的名称,所以我们可以任意写:

{"version": "0.2.0","configurations": [{"name": "调试当前文件","type": "debugpy","request": "launch","program": "${file}","console": "integratedTerminal","args": "${command:pickArgs}"},{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","console": "integratedTerminal","args": ["--weights","weights/yolov5s.pt","--cfg","models/yolov5s.yaml"]}]
}

上面我们就有了两个不同的配置,侧栏中可以任意切换:

2.2.2 “program” 关键字说明

"program" 关键字才是要调试的文件的名称,默认为 "${file}",表示 VSCode 编辑器当前打开的文件

2.2.3 “args” 关键字说明

"args" 关键字是我们想要传入的参数,默认是 "${command:pickArgs}",它允许用户在启动调试会话之前通过一个命令界面来选择或输入命令行参数,比如:

我们也可以直接用数组写入我们要传入的参数:

{"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","console": "integratedTerminal","args": ["--weights","weights/yolov5s.pt","--cfg","models/yolov5s.yaml"]}]
}

2.3 示例

利用这些关键字,我们可以自定义如何调试程序,比如我们想要传入参数即可按下面进行:

{"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "${file}","console": "integratedTerminal","args": ["--weights","weights/yolov5s.pt","--cfg","models/yolov5s.yaml"]}]
}

我们直接在侧栏进行调试:


我们发现程序虽然带有 --weights weights/yolov5s.pt --cfg models/yolov5s.yaml,但 debug 程序直接后就停止了,这是为什么?

这是因为我们的 lanuch.json 文件中的 "program" 关键字是 "${file}",即debug程序会对当前文件进行debug,但我们当前的文件是 launch.json 文件,所以程序就停止了 😂。

那么为了让其可以正常调试我们的 train.py 文件,我们选择该文件后再启用debug:

此时我们发现我们的debug正常开启了。


其实我们还有一个方法,那就是让 "program" 关键字写死:

{"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","console": "integratedTerminal","args": ["--weights","weights/yolov5s.pt","--cfg","models/yolov5s.yaml"]}]
}

这样无论我们打开哪个文件,直接在侧栏debug都是对 train.py 文件进行debug:

2.4 如何在 debug 前进入指定虚拟环境

2.4.1 〔⭐方法1〕利用 “python” 关键字

我们可以使用 "python" 关键字直接指定使用的 Python 路径:

{"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","console": "integratedTerminal","python": "/home/leovin/anaconda3/envs/wsl/bin/python","args": ["--weights","weights/yolov5s.pt","--cfg","models/yolov5s.yaml"]}]
}

💡 Tips:我们可以使用下面的命令查看 Python 的路径:

conda activate env_name  # 先激活我们的虚拟环境which python # 在 macOS 或 Linux 上
where python # 在 Windows 上

2.4.2 〔方法2〕在运行终端手动切换环境

首先我们先运行一遍 launch.json 的 debug,之后我们停止(打断),在之后我们手动激活虚拟环境:

conda activate env_name

最后我们再运行 launch.json 的 debug。

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

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

相关文章

如何改变.net托管的入口main函数

有小伙伴问: .NET托管入口Main函数可以修改成别的函数,用来作为程序的入口吗? 答案:当然是可以的。这也算是.NET里面非常简单的骚操了。本篇来用最新的.NET8演示下,如何修改Main入口。 1.简单控制台例子: namespace…

美国硅谷大带宽服务器|大带宽服务器租赁贵吗?

在数字化时代,服务器成为了支撑各种在线业务和应用程序的重要基石。尤其对于那些需要处理大量数据、保证快速响应和稳定连接的企业或个人来说,大带宽服务器成为了不可或缺的选择。而美国硅谷,作为全球科技创新的摇篮,其服务器租赁…

Open CASCADE学习|绘制砂轮

今天绘制一个砂轮,其轮廓由两条直线段和两段圆弧构成,圆弧分别与直线相切,两条圆弧之间相交而非相切。建模思路是:先给定两条直线段的起始点及长度,画出直线段,然后给定其中一圆弧的半径及圆心角&#xff0…

python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技…

【新手易错点】golang中byte和rune

1 总体区别 在Golang中,byte和rune是两种不同类型的数据。简单来说,byte是一个8位的无符号整数类型,而rune则是一个32位的Unicode字符类型。 Byte: 在Golang中,byte类型实际上是uint8的别名,它用来表示8位的无符号整…

flutter使用getx实现路由跳转,页面没有执行dispose

我们看一下flutter的StatefulWidget组件的生命周期: createState: 当一个StatefulWidget插入到渲染树结构、或者从渲染树结构移除时,都会调用StatefulWidget.createState方法,从而达到更新UI的效果; initState&#…

【刷题记录】链表的回文结构

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: LINK 2.详解思路: 思路:思路:先找到中间节点,然后逆置后半部分链表,一个指针指向链表的头节点,再一个指针指向逆置的头…

怎么在wifi中实现手机和电脑文件互传

有时我们想手机电脑文件互传,数据线却不在身边,这时我们可以用MiXplorer来实现wifi中手机和电脑互相访问文件。 MiXplorer是一款来自著名安卓开发者论坛XDA的作品,免费且功能强大,被很多人誉为是“全能文件管理器”。 1.在手机上…

Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具

下载地址: 链接:https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…

进程线程通信-day6

1、将信号和消息队列的课堂代码敲一遍 //发送端 #include<myhead.h>//定义一个消息结构类型 struct msgbuf {long mtype;char mtext[1024]; }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const…

CSS实现半边边框(只有边框的部分可见)

CSS实现半边边框&#xff08;只有边框的部分可见&#xff09; <div class"part box"><h1>内容</h1><!-- 绘出下面两个对角边框--><div class"part-footer"></div> </div>主要代码 .box {width: 100px;height:…

cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决

日常项目开发中。需要对qt5升级到qt6 做cmake兼容配置&#xff0c;在编译中发现&#xff0c;有c 编译环境 报错 2>C:\Qt\6.5.3\msvc2019_64\include\QtCore/qcompilerdetection.h(1226,1): fatal error C1189: #error: "Qt requires a C17 compiler, and a suitable …

ChatGPT的增长已经进入了瓶颈期

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue3自定义组件v-model双向绑定

无能吐槽一下&#xff0c;虽然用了很多遍v-model&#xff0c;但是还是不得要领&#xff0c;每次看官网都感觉说的不是很清晰&#xff0c;在写的时候还是要查看文档&#xff0c;可能就是不理解原理&#xff0c;这次特意好好写一篇文章&#xff0c;让自己好好理解一下。 自定义一…

React18源码: React调度中的3种优先级类型和Lane的位运算

优先级类型 React内部对于优先级的管理&#xff0c;贯穿运作流程的4个阶段&#xff08;从输入到输出&#xff09;&#xff0c;根据其功能的不同&#xff0c;可以分为3种类型&#xff1a; 1 &#xff09;fiber优先级(LanePriority) 位于 react-reconciler包&#xff0c;也就是L…

HarmonyOS Stage模型 应用配置文件讲解

好&#xff0c;上文 HarmonyOS Stage模型基本概念讲解 中&#xff0c;我们简单讲解了HarmonyOS 中 Stage模型的基本概念 那么 我们继续学习Stage模型的相关知识 上文之后 我们肯定对它的概念和基本结构 有了一个了解 那么 我们就来看一下 基于Stage模型 它里面一些基本的配置文…

FPGA领域顶级学术会议

FPGA领域顶级学术会议主要有FPGA,FCCM,FPL和FPT。 1 FPGA 会议全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 网站是:https://dl.acm.org/conference/fpga FPGA常年在美国举办,每年2月,偏FPGA基础研究; 该会议的论文免费下载。这个比…

Java项目:26 基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台&#xff0c;可以提高幼儿园信息管理的准确性&#xff0c;系统将信息…

数据结构D4作业

1.实现单向循环链表的功能 loop.c #include "loop.h" loop_p create_loop() { loop_p H(loop_p)malloc(sizeof(loop)); if(HNULL) { printf("创建失败\n"); return NULL; } H->len0; H->nextH; ret…

TiDB离线部署、Tiup部署TiDB

先做tidb准备工作&#xff1a; 部署 TiDB 前的环境检查操作&#xff1a;TiDB 环境与系统配置检查 | PingCAP 文档中心 1.查看数据盘 fdisk -l &#xff08;2,3&#xff09;本人的分区已经是 ext4 文件系统不用分区&#xff0c;具体官方文档的分区&#xff1a; 4.查看数据盘…