[英]Strange behavior of C abort function on mingw-w64
我是mingw-w64的新手,我遇到了以下问题:
我最近根据提供的说明在我的Windows 10计算机上安装了MSYS
我目前正在尝试构建一些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版本。
abort
与raise(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.