我正在使用Ubuntu 10.04操作系统。我执行了"ulimit -c 999"命令,然后编译并运行(gcc test.c && ./a.out
)这个小程序:
#include <signal.h>
int main( void )
{
raise( SIGSEGV );
return 0;
}
尽管它确实打印出了“分段错误”的消息,但我没有看到核心文件。我错过了什么阻止生成核心文件?
ulimit -c unlimited
如何启用核心转储?点击这里了解更多。
编辑:
好的,我明白问题所在了。您的核心文件限制太低了。999字节(您设置的值)是不够的。将其增加到合理的数值。无限制是最好的参数。
ulimit
命令和-c
标志来控制允许的核心文件最大大小。
ulimit -c unlimited
,然后调用kill(getpid(), SIGSEGV);
。 - Erikraise
并不完全相同。kill
会针对整个进程,而raise
则会针对调用raise
的线程。此外,当信号被传递时,kill
指定为提供SI_USER
的si_code
,而raise
可能会生成不同的代码(在Linux上它会生成SI_TKILL
)。 - R.. GitHub STOP HELPING ICE