【问题标题】:Why is CLion not showing exceptions?为什么 CLion 没有显示异常?
【发布时间】:2020-09-16 20:29:12
【问题描述】:

运行我的代码时,CLion 似乎没有向我显示任何异常。为了测试这一点,我创建了一个仅包含以下代码的新项目:

#include <iostream>

int main() {
    std::cout << "--- One" << std::endl;
    throw 6;
    std::cout << "--- Two" << std::endl;
    return 0;
}

这会导致以下输出:

C:\Users\david\CLionProjects\untitled\cmake-build-debug\untitled.exe
--- One

Process finished with exit code 0

如您所见,异常之前的代码被执行,而异常之后的代码没有被执行(如您所料)。但它没有显示有关异常的消息,而是显示“进程以退出代码 0 完成”,就好像没有发生异常一样。

在 Ubuntu 上编译和执行的相同代码(通过终端)显示错误消息。所以我认为问题出在 CLion 上。

如何解决这个问题,以便在我的代码中看到异常消息?

是否有任何设置可能导致这种行为?

我在带有 Cygwin 的 Windows 10 上使用 CLion。这是问题的截图:

【问题讨论】:

  • 类似的问题,但没有回答:stackoverflow.com/questions/52623592/….
  • 如果你几天后没有得到任何答复:请在youtrack.jetbrains.com/issues/CPP订票
  • 1) 您使用哪个工具链来编译它? 2)尝试在普通命令提示符下运行可执行文件。
  • 我正在用 Cygwin64 编译它。当我尝试在命令提示符中运行可执行文件时,由于缺少 dll 文件,我收到一条错误消息。我已经通过将 cygwin/bin 添加到路径变量来解决这个问题。现在的行为与 Clion 中的行为大致相同:执行异常之前的代码,并且命令提示符中也没有错误消息。所以我现在假设问题在于 Cygwin 而不是 Clion。我尝试过使用更新(和测试)版本的 g++ 和 gdb,但它没有改变任何东西。
  • 当我在 Clion 中调试程序时,我在 Debug->Console 中得到以下输出: Signal: ? (未知信号)进程以退出代码 541541187 结束

标签: c++ cmake cygwin clion jetbrains-ide


【解决方案1】:

Throw 也需要 try and catch

来自: http://www.cplusplus.com/doc/tutorial/exceptions/

// exceptions
#include <iostream>
using namespace std;

int main () {
  try
  {
    throw 20;
  }
  catch (int e)
  {
    cout << "An exception occurred. Exception Nr. " << e << '\n';
  }
  return 0;
}

在cygwin下编译运行的显示:

$ g++ prova1.cc -o prova1

$ ./prova1
An exception occurred. Exception Nr. 2

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 2014-11-10
    • 2011-12-12
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2014-11-30
    • 2020-06-13
    相关资源
    最近更新 更多