gpt4 book ai didi

c++ - 为什么我的捕获代码没有被执行?

转载 作者:行者123 更新时间:2023-11-28 02:56:14 29 4
gpt4 key购买 nike

有一个 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;
}
  • 如果我在 Debug模式下运行,工作正常。
  • 如果我在 Release模式下运行,工作正常。
  • 如果我在 F5+ ctrl 中运行,应用程序崩溃并且我的 catch 语句没有被执行。

如果我转到“调试”->“异常”,C++ 异常的复选框未被选中,而用户处理的 C++ 异常复选框被选中?所以我期待我的 catch 语句被执行。

我不明白为什么我的 catch 语句没有被执行.....

(也不明白为什么代码在release模式下运行,但在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 编写你的代码,你可以通过安装翻译器函数手动将结构化异常转换为 C++ 异常_set_se_translator .

关于c++ - 为什么我的捕获代码没有被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923744/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com