当我运行有段错误的程序时,我收到一条错误消息段错误:11。由于某种原因,我没有收到(核心转储)消息。我尝试运行 shell 命令ulimit -c unlimited
,但我仍然收到相同的错误,并且没有说核心转储。我是 GDB 新手,所以我用一个简单的程序尝试了它:
/* coredump.c */
#include <stdio.h>
int main (void) {
int *point = NULL;
*point = 0;
return 0;
}
但是当我编译时使用:
gcc coredump.c -g -o coredump
然后运行它,它仍然显示segfault: 11
它是否仍在我不知道的地方创建核心转储?我希望能够使用gdb coredump core。
最佳答案
看这个链接:
选项包括:
ulimit -c unlimited(默认 = 0:不生成核心文件)
转储目录必须可写。默认情况下,这是进程的当前目录,但可以通过设置/proc/sys/kernel/core_pattern 进行更改。
在某些情况下,/proc/sys/fs/suid_dumpable 中的内核值可能会阻止生成内核。
“man core”用于其他选项
find/-name core -print 2>/dev/null
在文件系统中搜索核心文件
我假设您正在运行Linux,并且我假设您正在具有写入权限的目录中执行.exe。
所以我的两个最重要的猜测是1)“ulimit -c unlimited”没有被设置,或者被覆盖,或者2)核心文件正在生成,但是去“其他地方”。
以上建议应该有所帮助。请发回您发现的内容!
关于核心转储不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020484/