VSCode调试器捕获异常点的详细步骤

老伟君_6183

老伟君_6183

2026-07-24

733人浏览

原创

vs code异常断点需按语言精准配置才生效:java须用jdk 21+、vscode-java-debug v0.60+,并在launch.json中显式配置exceptionbreakpoints如["java.lang.exception"],同时添加jvm参数-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005;javascript/python等其他语言也需对应调试适配器支持及正确配置。

vscode调试器捕获异常点的详细步骤

VS Code异常断点怎么设才生效

不是所有“抛出异常”的地方都会停,关键看调试器是否监听了对应语言的异常类型,以及底层调试适配器是否支持该异常传播路径。

  • JavaScript/TypeScript:直接按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Toggle Exception Breakpoint 回车,再输入异常名如 TypeError 或 ReferenceError
  • Python:需确保已安装 Python 扩展和 debugpy,并在 launch.json 中启用 "justMyCode": true(否则可能停在库代码里)
  • Java:必须用 vscode-java-debug v0.60+,且 launch.json 中明确配置 exceptionBreakpoints 数组,例如:["java.lang.Exception"]
  • PHP:依赖 Xdebug,需在 php.ini 启用 xdebug.mode=debug,并在 VS Code 中通过 Toggle Exception Breakpoint 添加类名,如 InvalidArgumentException

常见失效原因:没装对应语言的 Debug Adapter、Xdebug 版本不匹配、异常被上层 try-catch 吞掉但断点设在“未捕获”模式下。

为什么虚拟线程里的异常总抓不到

VS Code 默认不监听虚拟线程抛出的异常事件,因为 JVM 的调试协议对虚拟线程的支持是渐进式开放的,不是开箱即用。

  • JVM 必须启动时加参数:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,且版本 ≥ Java 21
  • launch.json 中不能只靠 "type": "java",必须显式声明 exceptionBreakpoints 并包含父类,如 java.lang.Throwable
  • vscode-java-debug 插件版本低于 v0.60 会完全忽略虚拟线程事件,升级后仍需重启 VS Code 才能加载新适配逻辑
  • 即使配置正确,异常也只会在 throw 行中断,而不是在 catch 块入口——这点和平台线程一致,但容易误判为“没断住”

验证方式:写一个只抛异常不 catch 的虚拟线程,运行调试;若控制台打印堆栈但 VS Code 不停,基本就是适配器或 JVM 参数问题。

VSCode
VSCode

避免常见的 VSCode 错误——设置冲突、调试器配置和扩展冲突。

下载

异常断点设在哪一级才合理

设太宽(如所有 Exception)会导致频繁中断,设太窄(如只设 CustomValidationException)又容易漏掉根本原因。得按场景分层处理。

  • 开发阶段排查未知问题:设 java.lang.Exception(Java)、BaseException(Python)、Error(JS),但勾选“仅未捕获”避免干扰正常流程
  • 定位第三方库报错:关闭“仅未捕获”,设具体异常类,比如 requests.exceptions.Timeout 或 io.grpc.StatusRuntimeException
  • 生产环境模拟调试:用 set_exception_handler(PHP)、Thread.setDefaultUncaughtExceptionHandler(Java)配合日志,而非依赖 IDE 断点
  • 异步任务(Promise / CompletableFuture):断点设在 throw 处有效,但 .catch() 或 exceptionally() 内部不会触发异常断点——那是错误处理逻辑,不是异常抛出处

注意:RuntimeException 子类在 Java 中默认不被“未捕获”模式捕获,必须显式加入 exceptionBreakpoints 列表,否则静默失败。

调试控制台里看到异常但没断住,怎么办

说明异常已被某处 catch 捕获并处理了,调试器按默认策略跳过——这不是 bug,是设计行为。

  • 打开调试面板 →「断点」栏 → 点击「+」号 → 选「异常断点」→ 勾选 Caught Exceptions(而非默认的 Uncaught Exceptions)
  • Python 用户需确认 launch.json 中 "console": "integratedTerminal",否则异常可能只输出到外部终端,VS Code 调试器收不到事件
  • Java 用户检查 launch.json 是否含 "stopOnEntry": false,某些旧版配置会覆盖异常断点行为
  • 如果用了 Lombok 的 @SneakyThrows,异常会被字节码层面抹除栈帧,VS Code 无法识别原始 throw 点,只能靠日志或反编译定位

最常被忽略的一点:VS Code 的异常断点只对当前 launch 配置生效,切换调试目标(比如从“启动”切到“附加”)后要重新设置,不会自动继承。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

1215

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

2452

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1849

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1707

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

2567

12

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1798

14

vscode用途介绍
vscode用途介绍

Visual Studio Code(VSCode)是一款由 Microsoft 开发的多功能文本编辑器,适用于各种编程语言。作为一款开源软件,VSCode 拥有代码高亮、自动补全、调试、Git 集成等强大功能,成为程序员不可或缺的工具。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1222

10

vscode和visualstudio的区别
vscode和visualstudio的区别

Visual Studio是一款功能强大的集成开发环境(IDE),适用于专业开发人员进行复杂项目的构建。而VSCode则是一款轻量级的代码编辑器,更适合各种规模的项目开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1096

8

vscode设置中文界面不生效解决方法
vscode设置中文界面不生效解决方法

vscode设置中文界面不生效解决方法:安装中文语言包、通过命令面板设置语言、检查 locale.json 设置、重新安装中文语言包、检查 VSCode 版本和更新、排除插件冲突、检查系统语言设置、查看 VSCode 日志和错误消息、重置 VSCode 设置、查看官方文档和社区支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

434

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程