Skip to contentSkip to conversation

No core dump when killed with ABRT, SEGV, etc.

Buildroot Grant Edwards 2 participants 3 messages Mar 26, 2013

lore
Share & tools
lore
#0 lore raw

I get a proper core dump if a program actually causes a segfault, but I can't figure out how to force a coredump by killing a running process.

On my desktop machines with glibc, this generates a core dump:

tty1:

   $ ulimit -c 9999999
   $ <start program>

tty2:

   $ kill -ABRT <pid>

On my buildroot system, there's no core dump. The program is aborted as expected, but it doesn't dump a core file. If the same program tries to actually dereference a NULL pointer there is a core dump.

Why doesn't killing a process with SIGABRT or SIGSEGV cause a core dump?

Signature · 3 lines
Grant Edwards               grant.b.edwards        Yow! I am covered with
                                  at               pure vegetable oil and I am
                              gmail.com            writing a best seller!
#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Grant" == Grant Edwards <[email protected]> writes:

Grant> I get a proper core dump if a program actually causes a segfault, but Grant> I can't figure out how to force a coredump by killing a running Grant> process.

Grant> On my desktop machines with glibc, this generates a core dump:

Grant> tty1:

Grant> $ ulimit -c 9999999
Grant> $ <start program>

Grant> tty2:
Grant> $ kill -ABRT <pid>

Grant> On my buildroot system, there's no core dump. The program is aborted Grant> as expected, but it doesn't dump a core file. If the same program Grant> tries to actually dereference a NULL pointer there is a core dump.

Grant> Why doesn't killing a process with SIGABRT or SIGSEGV cause a core Grant> dump?

Are you using busybox init? If so, ensure you have FEATURE_INIT_COREDUMPS enabled and a /.init_enable_core file in your rootfs:

config FEATURE_INIT_COREDUMPS
bool "Support dumping core for child processes (debugging only)" default y
depends on INIT
help
If this option is enabled and the file /.init_enable_core exists, then init will call setrlimit() to allow unlimited core file sizes. If this option is disabled, processes will not generate any core files.

Signature · 1 line
Bye, Peter Korsgaard
#2 lore raw
Quoted 20 lines · Peter Korsgaard
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Grant" == Grant Edwards <[email protected]> writes:

Grant> I get a proper core dump if a program actually causes a segfault, but Grant> I can't figure out how to force a coredump by killing a running Grant> process.

Grant> On my desktop machines with glibc, this generates a core dump:

Grant> tty1:

Grant> $ ulimit -c 9999999
Grant> $ <start program>

Grant> tty2:
Grant> $ kill -ABRT <pid>

Grant> On my buildroot system, there's no core dump. The program is aborted Grant> as expected, but it doesn't dump a core file. If the same program Grant> tries to actually dereference a NULL pointer there is a core dump.

Quoted 6 lines

Grant> Why doesn't killing a process with SIGABRT or SIGSEGV cause a core Grant> dump?

Are you using busybox init? If so, ensure you have FEATURE_INIT_COREDUMPS enabled and a /.init_enable_core file in your rootfs:

I don't have that set, but I don't think it would matter.

I'm starting the program from the command line in a tty as show above after running the ulimit command to enable core dumps. When I do that, I get a core dump if the program itself causes a segfault, but not if the program is killed with ABRT or SEGV signals.

The FEATURE_INIT_COREDUMPS just does the equivalent of the ulimit -c
command, right? Am I misunderstanding what FEATURE_INIT_COREDUMPS
does?

Signature · 3 lines
Grant Edwards               grant.b.edwards        Yow! ... bleakness
                                  at               ... desolation ... plastic
                              gmail.com            forks ...