繁体   English   中英

C中止函数在mingw-w64上的奇怪行为

[英]Strange behavior of C abort function on mingw-w64

我是mingw-w64的新手,我遇到了以下问题:

我最近根据提供的说明在我的Windows 10计算机上安装了MSYS

如何安装MinGW-w64和MSYS2?

我目前正在尝试构建一些Win32 C程序。 我首先尝试了一些简单的程序,它们似乎有效; 但是,我遇到了C中止功能的问题。

如果我在Linux上构建以下程序

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  printf("bla bla bla\n");
  abort();
}

然后运行它,我只是得到输出

bla bla bla
Aborted

但是,在Windows上输出是

bla bla bla

This application has requested the Runtime to terminate it in an unusual
way. Please contact the application's support team for more information.

消息窗口也会随消息一起出现

a.exe已停止工作 - 一个问题导致程序停止正常工作。 Windows将关闭程序并在解决方案可用时通知您。

这是应该的方式吗? 无论如何,我更喜欢Linux版本。

abortraise(SIGABRT)相同。

如果你没有捕获SIGABRT信号,则调用默认的OS处理程序,在Linux上这是转储核心,导致shell在标准错误上写入Aborted

在Windows上,它会终止并显示您看到的消息,如果使用控制台子系统,则显示标准错误;如果是gui,则显示在标准消息框中。 这可以通过非标准_set_abort_behavior来抑制。

如果您希望跨系统执行统一操作,则需要注册SIGABRT处理程序并SIGABRT执行以下操作:

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>

void handle_abort(int sig)
{
   // do something (e.g write to log)
   // don't let this handler return if you want to suppress defaut handler
}

int main(void)
{    
    signal(SIGABRT, handle_abort);

    abort();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM