为了提高PyTorch 训练脚本 的调试体验,基于(WSL + Conda):
🚀 一键调试训练代码 + 自动用终端窗口输出 + 适配 tqdm/matplotlib + 哪怕
input()
也不会挂!
✅ 第一步:配置调试器 dap(带优化)
在 ~/.config/lvim/config.lua
里加上 👇(如果你之前有类似配置就直接替换)
lvim.builtin.dap.active = true
-- 自动适配 Mason 安装的 debugpy
local mason_path = vim.fn.glob(vim.fn.stdpath("data") .. "/mason/")
pcall(function()
require("dap").adapters.python = {
type = "executable",
command = mason_path .. "packages/debugpy/venv/bin/python",
args = { "-m", "debugpy.adapter" },
}
end)
-- 训练脚本调试配置
local dap = require("dap")
dap.configurations.python = {
{
type = "python",
request = "launch",
name = "🔍 Debug PyTorch Train Script",
program = "${file}",
console = "integratedTerminal",
justMyCode = false, -- 能追踪库代码(如 torch)内部行为
pythonPath = function()
return "/home/your/miniconda3/envs/yolo11/bin/python" -- pyton路径
end,
env = {
QT_QPA_PLATFORM = "offscreen", -- 防止 Qt 报错
MPLBACKEND = "Agg", -- matplotlib 非GUI后端
},
},
}
✅ 第二步:加一个快捷键菜单(which-key)
你可以加在 lvim.builtin.which_key.mappings
里:
lvim.builtin.which_key.mappings["d"] = {
name = "+Debug",
s = { "<cmd>lua require'dap'.continue()<CR>", "▶️ Start Debug (DAP)" },
b = { "<cmd>lua require'dap'.toggle_breakpoint()<CR>", "⛔ Toggle Breakpoint" },
o = { "<cmd>lua require'dap'.step_over()<CR>", "⏭ Step Over" },
i = { "<cmd>lua require'dap'.step_into()<CR>", "⏬ Step Into" },
u = { "<cmd>lua require'dap'.step_out()<CR>", "⏏ Step Out" },
r = { "<cmd>lua require'dap'.restart()<CR>", "🔁 Restart Debug" },
q = {
function()
local dap = require("dap")
local dapui = require("dapui")
dap.terminate()
dap.disconnect()
dap.close()
dapui.close()
vim.cmd("DapVirtualTextDisable")
end,
"❌ Stop Debug",
},
}
按空格再按 d
,就能看到完整的调试菜单。
✅ 第三步(可选):自动打开终端(split)
可以设置一个自动命令,在调试开始时打开一个 split 的终端(你不想要可以跳过):
vim.api.nvim_create_autocmd("User", {
pattern = "DAPStarted",
callback = function()
vim.cmd("botright split | terminal")
end,
})
🚀 使用方式
- 打开你的
train.py
脚本 - 设置断点(
<Space> d b
) - 执行调试(
<Space> d s
) - 终端窗口会自动 split 出来显示日志