I'm trying to understand the core dump generation. Is the core dump generated separately for a user space application process crash and the kernel level crash? Is the ulimit -c
for both kinds?
1 Answer
When a userland program crashes, it can leave a core
file behind, containig a copy of the contents of the memory when it went down (the core
name comes from the prehistory of computing, when memory was core). This is controlled by the ulimit(1)
command, it is normally disabled as the core files are large and tend to confuse newbies. A core file can be analyzed by e.g. a debugger, together with the executable and symbol table, to find out what happened.
When the kernel crashes, it normally triggers a kernel panic. If the kernel has found some critical inconsistency, it really isn't wise to count on it bahaving sanely to write out anything. So no core gets generated, and the system goes down. Contents of registers and code surrounding the address where the problem happened is written to the console. It is a good idea to save this (e.g. take a picture) for possible later analysis.
A similar situation is the kernel Oops, when the kernel detects an inconsistency that isn't considered fatal. In that case (as in a kernel panic) contents of registers and code surrounding the address where the problem happened is written to the console, and also logged.
-
In my case the kernel version is
2.4.20
and it does not have theproc/sys/kernel/core_pattern
file to specify my own path to dump the core file. Whenever I build the kernel(along with the application) and load the bin in my embedded system the current directory is always/
and hence it is not able to generate the core dump when my application crashes,maybe due to the permissions issue. Is there any way that I can change the location of the core dump file or change the permissions of the/
dir or change the current dir/
to other dir say/tmp
. Also there is nosysctl.conf
file.– foo_lMar 11, 2013 at 6:37 -
The simplest may be to move the current working directory of the bin. If you can control how it starts, then first
cd
to a directory other than/
and start it from there. Otherwise, have the bin callchdir("/tmp")
(or other dir) if you can. Changing permissions on/
is possible, but may be unwise for security reasons.– ashAug 28, 2013 at 13:02