Generazione di file core su Ubuntu


2

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 filecomando:

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/kerneloutput 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?

Risposte:


0

Sembra che al tuo elfo manchino i simboli di debug. Forse è solo compilando

g++ -g -rdynamic -o main main.cpp

Hm, in realtà la situazione non è cambiata ma ho il sospetto che sto solo uccidendo lo stack. Se chiamo solo abort (), il core viene generato bene e può essere letto. (Interrotto (core scaricato)). Tuttavia, se scrivo all'esterno dell'array, il core generato è completamente illeggibile (errore di segmentazione (core scaricato)).
Melon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.