Visual Studio 2019:如何设置异常首次抛出即中断(即使被捕获)
Visual Studio 2019 异常抛出即时中断配置指南
核心实现效果
配置完成后,调试器会在代码跑到任意throw语句的瞬间直接中断,停在异常真实抛出的那行代码上——不管后续有没有try-catch把这个异常接住,都不会跳过抛出点。能彻底解决项目内异常处理器太多、等未处理异常弹窗弹出来的时候,调用栈已经绕了好几层、根本找不到最初抛异常位置的问题。
具体配置步骤
- 调出异常设置面板
直接按Ctrl+Alt+E打开异常设置窗口,不用绕几层菜单栏查找。 - 打开全局抛出即中断规则
- 找到对应开发栈的异常分类节点:做.NET开发就定位到
.NET Common Language Runtime 异常节点,做C++原生开发就定位到C++ 异常节点 - 直接勾选这个分类节点最外层的总复选框,系统会自动为分类下所有异常类型开启“抛出立刻中断”的规则
- 找到对应开发栈的异常分类节点:做.NET开发就定位到
关键踩坑提醒
别搞混两种中断触发逻辑,配错了等于白操作:
- Visual Studio默认逻辑:只有当异常完全没被任何代码接住、快要触发崩溃弹窗的时候,调试器才会中断。这时候异常已经走完所有捕获、处理流程,调用栈停在最外层的异常处理入口,根本追不到最初抛异常的位置
- 上述配置的规则:触发时机提前到执行
throw的瞬间,和后面会不会被捕获没有关联,直接能拿到最原始的异常抛出上下文
- 可以灵活调整中断粒度:如果调试的时候遇到一堆框架内部自己抛出、自己接住的已知干扰异常,可以在异常设置的全量列表里单独把对应异常类型的勾选去掉,避免被没用的异常频繁打断
- 解决外部库抛异常不中断的问题:如果要抓的异常是在引用的第三方类库内部抛出的,临时把调试工具栏里*“仅我的代码”(Just My Code)*的开关关掉——不然调试器会自动跳过外部库内部的抛出点,直接跳回自己写的调用方代码上,还是抓不到真实位置
- 所有配置会随解决方案自动持久化,保存在项目目录的.suo配置文件中,下次打开同一项目调试时无需重复设置
内容的提问来源于stack exchange,提问作者Yahav
相关产品推荐
相关产品推荐

