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
相关产品推荐
相关产品推荐

