You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017中C++未捕获异常:无法启用异常处理

解决VS2017中C++异常无法捕获的问题

嘿,我之前在VS2017里也踩过这个坑,大概率是项目的编译设置没配置对,咱们一步步来排查修复:

1. 确认C++异常已启用

这是最容易漏掉的核心设置:

  • 右键你的项目 → 选择「属性」
  • 展开「配置属性」→「C/C++」→「常规」
  • 找到「启用C++异常」选项,确保选中的是「是(/EHsc)」(如果需要捕获除零这类硬件异常,就选「是,带SEH异常(/EHa)」,但一般业务代码用/EHsc足够)

2. 关闭Debug模式下的优化

有时候优化会干扰异常捕获逻辑,Debug模式下务必关闭优化:

  • 在项目属性页中,进入「配置属性」→「C/C++」→「优化」
  • 把「优化」选项设置为「已禁用(/Od)」(Debug模式默认是这个,但如果之前手动改过就调回来)

3. 区分硬件异常和软件异常

你提到的除零操作属于硬件异常,默认的/EHsc开关不会让C的try/catch捕获到它——C标准里的异常捕获本来就只针对主动throw的软件异常(比如std::exception及其子类)。

如果要测试异常捕获是否正常,用这个标准的软件异常代码试试:

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("测试软件异常");
    } catch (const std::exception& ex) {
        std::cout << "成功捕获异常:" << ex.what() << std::endl;
    }
    return 0;
}

正常配置下,这段代码应该能输出捕获信息,不会崩溃。

4. 检查是否误编译为C代码

如果项目被设置成编译C代码,那C++异常自然就失效了:

  • 进入「配置属性」→「C/C++」→「高级」
  • 确认「编译为」选项是「编译为C++代码(/TP)」

按照上面的步骤排查,应该就能解决异常无法捕获的问题啦!

内容的提问来源于stack exchange,提问作者Andrea Buzzelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:38:58