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

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

如何在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

相关代码片段:

def generate_individual(input_ranges, individual_length):individual = []for i in range(individual_length):lower_bound, upper_bound = input_ranges[i]individual.append(random.uniform(lower_bound, upper_bound))return individualdef run(**kwargs):# Usage: import train; train.run(data='coco128.yaml', imgsz=320, weights='yolov5m.pt')opt = parse_opt(True)for k, v in kwargs.items():setattr(opt, k, v)main(opt)return optif __name__ == "__main__":opt = parse_opt()main(opt)

2. 使用 launch.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 “name” 关键字说明

"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 程序直接后就停止了。这是因为我们的 launch.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〕在运行终端手动切换环境

  1. 首先我们先运行一遍 launch.json 的 debug,之后我们停止(打断);
  2. 之后我们手动激活虚拟环境:conda activate env_name
  3. 最后我们再运行 launch.json 的 debug。
http://icebutterfly214.com/news/71338/

相关文章:

  • 经济学数据如何优化员工体验的技术实践
  • 第六篇 Scrum 冲刺博客
  • 2025年11月治鼻炎产品推荐:一份详尽的清单与选择指南
  • 如何在Java中使用NIO框架?
  • 全自动滤水器厂家推荐:连云港华博与博璟源的专业之选
  • mysql查看binlog, 追溯历史
  • 2025年下半年特氟龙喷涂、聚四氟乙烯喷涂、陶瓷喷涂、碳化钨喷涂、聚四氟乙烯管道设备厂家口碑推荐
  • 怎样减少库存对资金的占用?企业老板最该先解决的,其实就是这三件事
  • 数组的拼接
  • 洛谷 P3386:【模板】二分图最大匹配 ← 匈牙利算法
  • NeurIPS 2025|让AI读懂第一视角的“内心独白”!浙大等联合突破性实现自我中心视频推理
  • 实验5 MapReduce初级编程实践
  • 2025年抗气爆O形圈厂家权威推荐榜单:橡胶扶正器/V3级胶筒/震击器源头厂家精选
  • [H3C/华三]Super VLAN技术简述与配置
  • 留学中介机构排名TOP10新鲜出炉,这家值得选择
  • 2025知名的成都制冷设备厂家最新TOP排行榜
  • 实测有效!有抗衰效果的口服产品,30+内调抗衰宝藏清单
  • 2025年花都人气湘菜馆TOP5推荐,花都菜品好的湘菜馆与旅
  • 2025年中国深海环境模拟装备公司TOP5推荐:卡普蒂姆的发
  • 关于XSS和CSRF,面试官更喜欢这样的回答!
  • 口碑佳的深海环境模拟试验装置制造商TOP5推荐:售后完善选择
  • 主题:训练循环定制化实战:以CustomTrainer.fit为例
  • 2025年无人机反制模块制造企业权威推荐榜单:无人机探测设备‌/无人机侦测反制设备 ‌/无人机反制设备源头厂家精选
  • 点阵液晶屏驱动LCD显示驱动芯片-VK0256C 液晶显示驱动原厂【FAE技术支持】
  • 二、使用Spring AI实现基于sse协议的MCP Server
  • 家长必看!2025-2026申请季A-Level全日制机构排名(6 家头部详解+三大梯队)
  • 体育赛事赋能创新 亚运奥运多维突破
  • 2025 年 11 月电线电缆租赁厂家实力推荐榜:专业电缆线出租,临时用电电缆,电力电缆,空调电缆租赁服务,高效安全与灵活解决方案之选
  • 借助 GitHub Workflow 定时获取博客状态
  • 2025上海口碑好的留学机构