консольная программа Visual Studio вылетает после управления c - PullRequest
0 голосов
/ 01 февраля 2020

Я использую последнее обновление Visual Studio 2019 (версия 16.5.0 Preview 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;
}

enter image description here

1 Ответ

1 голос
/ 01 февраля 2020

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

Здесь говорится, что если приложение отлаживается, «система генерирует исключение DBG_CONTROL_ C. Это исключение возникает только в интересах отладчик». Следовательно, это не сбивает; Вы можете продолжить исключение, и оно должно работать нормально. Документация гласит:

Если отладчик передает исключение на необработанное, CTRL + C передается в процесс консоли и обрабатывается как сигнал, как обсуждалось ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...