必须配置"console": "integratedTerminal"且env中设PYTHONUNBUFFERED=1,并为device显式标注torch.device类型,否则断点失效、变量面板为空、GPU内存显示为0。

断点不生效、变量面板空、GPU内存显示为0——八成是 launch.json 没配对,或者 PYTHONUNBUFFERED 漏了。
console 必须设为 "integratedTerminal"
VSCode 默认的 internalConsole 会截断 stdout/stderr,导致调试器收不到张量创建、loss打印等关键信号;externalTerminal 在 Windows 下常闪退,Linux/macOS 下也不支持 PyTorch 变量展开。只有 integratedTerminal 能稳定承载训练循环的完整 I/O 流。
- 配置写法必须是:
"console": "integratedTerminal",不能加空格或引号错误 - 不要用
externalTerminal:远程开发或 WSL 下容易卡死或丢失 CUDA 上下文 - 别选
internalConsole:Pylance 无法识别torch.Tensor类型,悬停看不了.shape或.device
env 里必须显式加 PYTHONUNBUFFERED=1
PyTorch 训练中大量 print、logging.info、tqdm 进度条都依赖标准输出实时刷新。默认 Python 会缓冲 stdout,导致 VSCode 调试器“看不见”运行时状态,断点看似命中但变量面板为空,torch.cuda.memory_allocated() 返回 0 就是典型症状。
- 必须写:
"env": {"CUDA_VISIBLE_DEVICES": "0", "PYTHONUNBUFFERED": "1"} -
CUDA_VISIBLE_DEVICES可按需改,但PYTHONUNBUFFERED缺一不可 - 漏掉这个环境变量,哪怕断点进了
model.train(),你也看不到 batch 的任何 shape 或 dtype
args 里的路径要用 ${workspaceFolder} 相对写法
训练脚本常通过 argparse 加载 YAML 配置或数据集路径。如果在 launch.json 的 args 里写绝对路径(比如 "--config", "/home/user/project/configs/train.yaml"),远程开发(SSH 或 Dev Container)时会直接报 FileNotFoundError —— 因为路径在服务器上根本不存在。
- 正确写法:
"--config", "${workspaceFolder}/configs/train.yaml" - 所有路径类参数都应基于
${workspaceFolder},包括--data、--weights、--logdir - Windows 用户注意斜杠方向:VSCode 自动处理,统一用正斜杠
/即可,不用\
Pylance 要能识别 device 是 torch.device 类型
变量面板不展开张量、悬停只显示 Any、右键“Copy Value”粘过去才看到 shape?大概率是 Pylance 没推断出 device 变量类型,进而跳过了 PyTorch 专用渲染逻辑。
- 在代码里显式标注:
device: torch.device = torch.device("cuda") - 或者初始化后加类型注释:
device = torch.device("cuda:0") # type: torch.device - 鼠标悬停到
device上,若显示torch.device而非Any,才算成功 - 没标类型时,
batch['image'].to(device)在变量面板里就只是个普通 dict,不会触发 tensor 展开
最易被忽略的是 PYTHONUNBUFFERED=1 和 device 类型标注——前者让调试器“看见”运行流,后者让 IDE “理解”张量结构。这两处不落实,其他配置再全也白搭。


















