首页 > 解决方案 > Visual Studio 控制台程序在 control-c 后崩溃

问题描述

我正在使用 Visual Studio 2019 的最新更新(版本 16.5.0 预览版 2.0)并试图拦截 control-c 事件。但是由于某种原因,控制台程序总是在调用我的处理程序之前崩溃。顺便说一句,即使我不安装任何处理程序,程序也会崩溃。

这可能是编译器中的错误吗?一般来说,你如何调试这样的东西?

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
#include <cstdint>

uint64_t iterations;
bool running;

BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
{
    switch (fdwCtrlType) {
        case CTRL_C_EVENT: {
            running = false;
            return TRUE;
        } break;
        default: {
            return FALSE;
        } break;
    }
}

int main()
{
    if (!SetConsoleCtrlHandler(CtrlHandler, TRUE)) {
        std::cout << "Could not install control handler" << std::endl;
    }
    running = true;
    while (running) {
        iterations++;
    }
    std::cout << "Terminated after " << iterations << " iterations." << std::endl;
    return 0;
}

在此处输入图像描述

标签: c++windowsvisual-studio

解决方案


https://docs.microsoft.com/en-us/windows/console/setconsolectrlhandler

这里它说如果正在调试应用程序,“系统会生成一个 DBG_CONTROL_C 异常。这个异常只是为了调试器的利益而引发的”。因此,它没有碰撞;您可以继续执行,它应该可以正常工作。文档说:

如果调试器在未处理时传递异常,则 CTRL+C 将传递到控制台进程并作为信号处理,如前所述。


推荐阅读