I am using Ubuntu 12.04 LTS. I wrote a simple program as follows to create crash
// null.c
#include<stdio.h>
int main()
{
int *p = NULL;
int k=*p;
printf("%d",sizeof(0));
return 0;
}
Now I run with "gcc -g null.c" and then "./a.out" and the output is as expected.
Segmentation fault (core dumped)
Now I want to see the core dump file using gdb. I did the following things
- I checked the current directory, there is no core dump file
- I tried tried to change the /proc/sys/kernel/core_pattern with the content "core.%e.%p". But i am not able to write into the file. It is saying "Fsync Failed".
- I used the "sudo vi /proc/sys/kernel/core_pattern". Still can't write into the file.
I want to create the core dump in my current directory. What to do now?
Your real question appears to be not "where is my core dump", but rather "how can I modify /proc/sys/kernel/core_pattern
".
sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern'
should do the trick.
You need to adjust your core dump size limit with following command:
ulimit -S -c maximum-core-dump-size
The the value is given in Kb.
you do not need to use core pattern. its just dumps in that format %e.%p
what you need to do is #ulimit -c unlimited
and check #ulimit -a
and confirm if core file size is set properly. You will get the core as core.pid after that.
My understanding is that using ulimit is not permanent, i.e. if you reboot then the limit goes back to 0. To have unlimited permanent, you need to change /etc/security/limits.conf. Similarly for core pattern etc, change /etc/sysctl.conf.
来源:https://stackoverflow.com/questions/12760220/unable-to-create-a-core-file-for-my-crashed-program