c++ - 如果应用程序崩溃(例如段错误或未处理的异常),由于某些 Win10 更新它现在似乎静静地死去

标签 c++ windows winapi

过去,无效的内存访问或应用程序中未处理的异常会导致显示某种形式的消息框。

在我看来,最近这不再是真的了。我可以创建一个小应用程序,它除了写入 NULL 指针外什么都不做,从 Windows shell 运行它,然后它就会静静地死掉。

我安装了 Visual C++ 命令行工具并用于编译那个小应用程序(纯 C++ 和 win32 SDK)。应用在 64 位模式下编译。

有什么线索吗?我真的很想念那些崩溃消息框......

最佳答案

默认情况下,此消息框是禁用的。您可以为此做一些事情:

1。 (重新)启用消息框(很可能是您正在寻找的)

按“开始”并输入 gpedit.msc。然后导航到计算机配置 -> 管理模板 -> Windows 组件 -> Windows 错误报告 -> 防止显示严重错误的用户界面 并选择已禁用Disable the Prevention 如果您的应用程序崩溃,这至少会返回一些错误消息。

2。设置未处理的异常过滤器(可能很危险)

Install an exception handler filter并过滤出您想要的异常(exception)情况。这里的缺点是,在每次抛出异常时都会调用过滤器。

3。设置信号处理程序(也很危险)

基本像this .

void SignalHandler(int signal)
{
    printf("Signal %d",signal);
    throw "!Access Violation!";
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGSEGV , SignalHandler);
}

4。使用 Windows 错误报告

正如 IInspectable 所提及并在他的 answer 中描述的那样.


选项 2 和 3 可能会变得非常棘手和危险。您需要对 SEH 有一些基本的了解异常(exception),因为不同的选择会导致不同的行为。此外,并非异常处理程序中允许所有内容,例如:写入文件被认为是极其危险的,甚至打印到终端。另外,由于您正在处理此异常,您的程序不会终止,这意味着在处理程序之后,它会立即跳回错误代码。

关于c++ - 如果应用程序崩溃(例如段错误或未处理的异常),由于某些 Win10 更新它现在似乎静静地死去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53276446/

相关文章:

c++ - glDrawPixels 访问违规读取位置

windows - 如何在 Windows 上限制进程的 CPU 使用率? (需要代码,而不是应用程序)

windows - 批处理文件以取消阻止从互联网复制的文件

winapi - 如何在外语版本的 Windows 上获取英文错误消息?

c++ - ofstream:运行索引不起作用

c++ - OpenGL 中的乱序 Z 缓冲区

c++ - 什么时候在窗口上设置最顶层不起作用?

visual-studio - 如何显示 Win32 MessageBox?

c++ - 带有内部引用的初始化列表

Python 程序在 CMD 中工作但在导出到 .exe 时不工作