【问题标题】:How to get CLion to show exceptions?如何让 CLion 显示异常?
【发布时间】:2020-07-14 16:30:19
【问题描述】:

我安装了大概默认配置的 CLion。我认为它有问题,因为我看不到异常。例如这段代码:

int main(){ throw 5; }

仅打印Process finished with exit code 0

  • 为什么不打印异常?
  • 为什么打印的是 0 而不是 1?

比较:

int main(){try { throw 5; } catch(int x) { std::cout << x << '\n'; }}

这会打印 5,因此看起来代码运行正确并且异常被正确抛出。它只是被 CLion 以某种方式隐藏了。

编辑:这不是“没有看到任何控制台输出”的重复。我在我的问题中非常清楚地表明我确实看到了打印的控制台输出。我的问题特别关注异常,而不是一般的控制台输出。

【问题讨论】:

  • 这是很多事情,但不是重复询问如何在 CLion 中获取控制台输出的问题 - 问题是是否可以打印未捕获的异常(最终调用 std::terminate),以及为什么它在std::terminate 之后显示退出代码0(当std::abort 的默认终止处理程序应该返回一个退出代码,表明终止不成功)。另一个重复是关于超出数组边界,而不是关于 C++ 异常。

标签: c++ clion


【解决方案1】:

在您的第一段代码中,您没有捕获到异常,因此它由默认处理程序处理。因此,您无法控制可执行文件的返回代码。操作符合预期。

如果您希望 CLion 显示异常,您可以对其进行配置。请注意,这仅在 CLion 调试您的可执行文件时适用,在 CLion 之外,您的可执行文件将继续像您已经看到的那样运行。

  • 转到运行,然后查看断点
  • 转到异常断点抛出任何异常时
  • 要在抛出异常时显示堆栈跟踪检查堆栈跟踪
  • 如果您希望程序停止以进行干预,请选中enabledwhen throwed
  • 确保使用 Run/Debug 而不是 Run/Run 来启动您的程序。

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 2012-01-27
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多