ctrl+click可直接跳转终端报错中的标准格式路径(如user.service.ts:42:15),前提是语言服务器正常工作且格式严格匹配;logpoint用于非中断式日志输出,debug console用于当前上下文表达式求值,compounds调试需防端口冲突。

VSCode 的调试功能本身不自动让排错变简单——它只在你用对快捷键、配对配置、读对日志位置时才真正生效。F5 启动调试只是起点,不是解法。
Ctrl+Click 跳转报错位置比手动查文件行号快得多
终端报错里带 user.service.ts:42:15 这种格式?把鼠标悬停在上面,按住 Ctrl 点击,直接跳转到对应行和列。不用切回编辑器再 Ctrl+P 搜文件,也不用拖滚动条找第 42 行。
- 这个功能依赖语言服务器正常工作;如果点不动,先试
Alt+F12预览定义,确认类型信息是否加载成功 - 只对标准格式有效:
文件名:行号或文件名:行号:列号,中间不能有空格或括号干扰 - 某些打包工具(如 Vite)输出的错误可能带 sourcemap 路径,此时需确保
launch.json中已启用"sourceMaps": true
Logpoint(日志断点)比 console.log 更干净
想看循环变量值又不想中断执行?右键代码行左侧空白处 → “Add Log Point…”,输入表达式如 "i = {i}, item = {items[i]}",它会编译成 JVM 或 JS 引擎可识别的日志注入指令,不污染源码。
- Java 项目中,Logpoint 本质是 JDWP 协议下发的
EventRequest,不触发断点暂停,但依赖调试器连接稳定 - JS/TS 项目中,它会被 Babel 或 TS 编译器转为
console.log,但只在调试模式下生效,生产构建自动剔除 - 别在高频函数里滥用:每秒上千次调用加 Logpoint 可能拖慢执行,优先用条件断点 + 表达式求值
调试控制台(Debug Console)不是终端(Terminal)
Debug Console 显示的是当前断点上下文中的变量快照、console 输出、以及你手动输入的表达式结果;而 Terminal 是进程的标准输出流,混着构建日志、HTTP 请求、甚至 npm 提示。
- 查变量值、执行
JSON.stringify(state)、调用临时函数,用Debug Console - 看完整启动日志、复现命令、检查环境变量,切到
Terminal - Spring Boot 项目里,
DEBUG级日志默认输出到Terminal,不是Debug Console;要让它进调试面板,得在launch.json的vmArgs加-Dlogging.pattern.console="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
多模型调试必须用 compounds,但得防端口冲突
同时跑 Python 模型和 Node.js API?单靠多个 launch.json 配置不行,得用 compounds 合并启动。但两个服务如果都监听 :3000,第二个会失败。
- 在每个子配置里显式指定不同端口:
"env": {"PORT": "3001"}(Node)或"args": ["--port", "8001"](Python) - 启动前先检查端口占用:
lsof -i :3000(macOS/Linux)或netstat -ano | findstr :3000(Windows) -
compounds不保证启动顺序,异步依赖要用健康检查脚本或preLaunchTask延迟第二个服务
最常被忽略的一点:VSCode 调试器看到的变量,是当前栈帧里“还活着”的那部分。闭包外层变量、已被 GC 标记的对象、或者被编译器优化掉的局部变量,Variables 面板里就是空的——这不是插件问题,是运行时真实状态。











