Linux C程序:这个SIGABRT来自哪里?

时间:2016-07-17 02:45:38

标签: c linux multithreading glibc sigabrt

在Fedora 22虚拟机上,我的C程序崩溃了SIGABRT。 GDB指向glibc存根中用于轮询系统调用的指令。反汇编看起来像这样:

 0x7f5359c46662 <poll+34>                mov    %rax,(%rsp)
 0x7f5359c46666 <poll+38>                mov    $0x7,%eax
 0x7f5359c4666b <poll+43>                syscall
>0x7f5359c4666d <poll+45>                mov    (%rsp),%rdi
 0x7f5359c46671 <poll+49>                mov    %rax,%rdx
 0x7f5359c46674 <poll+52>                callq  0x7f5359c5fa30 <__libc_disable_asynccancel>

(存根的源代码是汇编代码,需要进行复杂的宏处理,所以这里不值得引用。)

我不知道SIGABRT的来源。

民意调查系统调用联机帮助页并不能说它可以提出SIGABRT。

还有另一个线程,但它正在等待读取系统调用,所以我不知道它是如何向崩溃线程发送信号的。

我不知道系统中可能会杀死SIGABRT&#34;这个过程。

使用-D_FORTIFY_SOURCE = 2编译代码,这可能导致SIGABRT,但我希望它是同步的,这样gdb就会指向引发它的代码。

1 个答案:

答案 0 :(得分:0)

两个潜在来源: