【发布时间】:2020-02-01 05:31:07
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
它没有崩溃。在调用处理程序之前,当抛出异常时,调试器将停止执行。如果您告诉调试器继续执行,您应该会看到程序处理它。
-
@1201ProgramAlarm 啊,我实际上阅读了有关调试器的文档,但没有意识到这是调试器“处理”异常的方式。谢谢!有趣的是,在发布版本中,在我继续调试器后,
running仍然没有设置为 false。
标签: c++ windows visual-studio