为什么我的 catch 代码没有被执行?
Why doesn't my catch code get executed?
有一个C++应用程序VS2012,看起来像:
int main(int argc, char* argv[]){
try{
//Stuff
}
catch(exception& e){
std::cout << e.what() << std::endl;
}
int b;
cin >> b;
return 0;
}
- 如果我在调试模式下运行,工作正常
- 如果我在释放模式下运行,效果会很好
- 如果我在F5+ctrl中运行,应用程序将崩溃,并且我的catch语句不会执行
如果我转到调试->异常,C++异常的勾选框没有勾选,而C++异常的用户处理框勾选了?所以我期待着catch语句被执行。
我不明白为什么我的catch语句没有被执行。。。。。
(也不明白为什么代码在发布模式下运行,但没有在f5+ctrl模式下运行)
C++异常机制不应该捕获程序中的"崩溃"。Visual Studio编译的代码中的"崩溃"会生成所谓的结构化异常,并由__try - __except - __finally
机制处理。它们完全独立于C++异常。通常,它们不会被C++异常处理程序(即catch
)捕获。
如果您想通过C++try - catch
异常处理机制拦截结构化异常,则必须以/EHa
模式编译代码(这可能会带来显著的性能开销)。在IDE中,这是通过项目设置C/C++ -> Code Generation -> Enable C++ exceptions
来控制的。但是,结构化异常与std::exception
类型不兼容,因此您的catch(exception& e)
仍然不会拦截它们。你必须用catch (...)
抓住他们,然后用其他方法弄清楚发生了什么。
更好的是,如果你真的必须这样做,并且你想用std::exception
编写代码,你可以通过_set_se_translator安装一个翻译器函数,手动将结构化异常转换为C++异常。
相关文章:
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 无法在我的堆排序代码中找到错误.无法正确执行.C++
- 为什么我的最后一个 ELSE 条件无法正确执行
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 为什么我的信号处理程序只执行一次?
- 如何在不进入 Visual Studio 2015 中的外部库的情况下单步执行我的代码 (F11)
- 为什么程序运行时我的第二个循环不执行?
- 当我告诉它通过控制台执行此操作时,我的c ++循环不会停止
- 计算有多少人执行我的C++应用程序
- 为什么当我正确执行语法时,我的代码输出为 0
- 当循环正在执行我不明白的代码时
- 为什么重新执行我的多线程代码后输出不一样
- 执行我的代码的.exe结果时错误,但在调试器中执行该代码时没有错误
- 如何控制哪个numa节点执行我的程序
- 如何在睡眠期间按顺序执行我的动作?(C++,威纳皮)
- 围绕glutMainLoop执行我的其余程序
- 我的C++程序没有执行我的 cout 代码
- 在visualstudioc++2010中执行我的c++程序后收到发送错误报告
- 我怎么能随心所欲地执行我的职能呢
- 复制到程序文件(x86)时无法执行我的DLL