Recentemente ho cercato di abilitare i core dump su Ubuntu. Ho creato un programma semplice, che si arresterebbe in modo anomalo (scrive alcuni dati fuori dall'array).
Inizialmente non sono stati generati dump core. Questo perché ulimit è stato fissato a zero, in modo da eseguire il comando: ulimit -c unlimited
. Questo non ha aiutato, perché la maggior parte delle discariche core arriva apport
. Ho anche disabilitato da un altro comando semplice: echo "core" > /proc/sys/kernel/core_pattern
.
Di conseguenza, il core viene generato, ma non è ancora possibile leggerlo gdb
. Ecco l'output di gdb
:
root@melon:/home/melon/test# gdb ./a.out ./core.3506
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/melon/test/a.out...done.
[New LWP 3506]
warning: Can't read pathname for load map: Input/output error.
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007fa2dc0f976d in ?? ()
(gdb) bt
#0 0x00007fa2dc0f976d in ?? ()
#1 0x0000000000000000 in ?? ()
Ed ecco l'output del file
comando:
core.3506: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './a.out'
E l'inizio di ulimit -a
:
core file size (blocks, -c) unlimited
E eco di /proc/sys/kernel
output più importante :
cat /proc/sys/kernel/core_pattern
core
cat /proc/sys/kernel/core_uses_pid
1
cat /proc/sys/kernel/core_pipe_limit
0
La mia domanda è: cosa sto facendo di sbagliato? Come posso generare un file core, che verrà letto da gdb
?