6月2日 01:15

VSCode 调试怎么配?launch.json 配置和断点调试实战

VSCode 的调试器支持 Node.js、Python、C++、Java 等主流语言。核心配置文件是 .vscode/launch.json,定义调试的启动方式和参数。

最快上手:不用写配置

很多语言不需要手写 launch.json:

  • Node.js:打开 JS 文件,按 F5,VSCode 自动以当前文件启动调试
  • Python:装 Python 扩展后,打开 .py 文件按 F5 自动调试
  • HTML:装 Live Server 扩展,右键 "Open with Live Server" 在浏览器调试

如果自动检测不对,按 F5 后从弹出的环境列表中选择。

手动配置 launch.json

需要精细控制时,创建 .vscode/launch.json

json
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Debug Server", "program": "${workspaceFolder}/src/index.ts", "runtimeArgs": ["--nolazy", "-r", "ts-node/register"], "env": { "NODE_ENV": "development" }, "console": "integratedTerminal" }, { "type": "node", "request": "attach", "name": "Attach to Process", "port": 9229, "restart": true } ] }

两种 request 模式:

  • launch:VSCode 启动程序并附加调试器
  • attach:程序已经在运行,VSCode 附加到进程上调试(适合调试 Docker 容器或远程进程)

常用调试操作

操作快捷键说明
开始/继续F5启动调试或继续运行到下一个断点
单步跳过F10执行当前行,不进入函数内部
单步进入F11进入函数内部
单步跳出Shift+F11跳出当前函数
停止Shift+F5终止调试
重启Ctrl+Shift+F5重启调试会话

断点类型

普通断点:点击行号左侧的空白区域设置。

条件断点:右键行号选 "Add Conditional Breakpoint",输入条件表达式(如 i === 50)。只有条件为 true 时才暂停,调试循环时很有用。

日志断点:右键选 "Add Logpoint",输入日志文本(如 Current value: {variable})。不暂停程序,只在控制台打印——比 console.log 干净,不改代码。

命中计数断点:条件断点里设置 hit count(如 5),第 5 次执行到才暂停。适合循环中某次迭代出问题的场景。

调试面板

暂停时左侧出现三个面板:

  • Variables:当前作用域的局部变量和全局变量,可以展开对象查看属性
  • Watch:自定义监视表达式,实时计算值
  • Call Stack:调用栈,点击任意帧跳转到对应代码位置

Variables 面板可以直接修改变量值——双击数值输入新值,继续运行时会用新值。调试算法逻辑时非常有用。

调试远程/容器程序

Docker 容器:在 launch.json 里配 attach 模式,指向容器暴露的调试端口:

json
{ "type": "node", "request": "attach", "name": "Docker Attach", "port": 9229, "address": "localhost", "localRoot": "${workspaceFolder}/src", "remoteRoot": "/app/src", "restart": true }

localRootremoteRoot 做路径映射——VSCode 用本地路径显示代码,但调试器用容器内的路径。restart: true 在容器重启后自动重新连接。

常见问题

断点不生效(灰色圆圈):代码和编译产物不一致。确保构建后再调试,或配 preLaunchTask 自动构建。

无法 attach 到进程:目标进程必须以调试模式启动。Node.js 加 --inspect 参数,Python 加 -m debugpy --listen 5678

调试时跳进了 node_modules:在 launch.json 里加 "skipFiles": ["<node_internals>/**", "node_modules/**"],调试时自动跳过这些文件。

标签:VSCode