程序在调试执行过程中以状态码 0 退出

Program exits with status code 0 in the middle of the execution in debug

我已经将我的程序缩减到绝对最小值,并且在调试模式下似乎有一个奇怪的错误(它在发布模式下有效)。每当我在行 auto* buckets = new Temp[bucket_count]; 上设置断点时,Clion 在该行停止后的半秒内以 Process finished with exit code 0 退出。此后不再执行任何代码行。

但是,如果我注释掉 lambda const auto GetBucketIndex = ...;,断点会停止,我可以继续单步执行我的程序(此示例和我的非缩减程序的行为相同).删除模板并将其替换为 int 也会消除错误。

我最初的想法是我在某处有一些未定义的行为,但我看不出会有任何行为。可能是什么问题?这可能是 Clion 的错误吗?我的另一个网络项目也遇到了同样的问题。

#include <cstdio>

struct Temp
{
    int hello;
};


template <class T>
void BucketSort(T* array, size_t count, size_t bucket_count)
{
    auto* buckets = new Temp[bucket_count];
    const auto GetBucketIndex = [](int element, size_t bucket_count) { return size_t((element / 9.0001f) * bucket_count); };
}


int main()
{
    printf("BucketSort:     ");
    int array[10] = {6, 3, 2, 0, 1, 5, 8, 7, 9, 4};
    BucketSort(array, 10, 3);
}

OP 提交的 CLion 错误报告

原始答案(提示 OP 打开错误报告)

您的程序格式正确,这很可能是 CLion 调试器子系统中的错误,已经有几个类似的公开错误报告:

许多未解决的工单都有一个共同点,即缺乏细节或缺乏可重现的示例。但是,正如您所做的那样,有一个简洁的示例,您可能希望 submit a bug report 在调试器子系统上。


然而,有一些关闭的可以说是相关的工单

后者的调查和解决,涉及到用lldb调试,特别有意思:

Maxim Banaev commented 29 Feb 2020 00:44:

Broken in CLIon 2019.1.4

Works fine in CLion 2019.2.5( #CL-192.7142.39) and later versions.

如果您也在使用 lldb,您可能希望在提交自己的报告之前尝试使用 CLion 2019.2.5 或更高版本重现您自己的问题。