Parece que o seu elf está sem símbolos de depuração. Talvez seja apenas compilando com
g++ -g -rdynamic -o main main.cpp
Recentemente eu tenho tentado habilitar os core dumps no Ubuntu. Eu fiz um programa simples, que iria falhar (ele escreve alguns dados fora da matriz).
Inicialmente, os core dumps não foram gerados. Isso foi porque o ulimit foi definido como zero, então eu executo o comando: ulimit -c unlimited
. Isso não ajudou, porque a maioria dos despejos do núcleo chega a apport
. Eu também desativei isso por outro comando simples: echo "core" > /proc/sys/kernel/core_pattern
.
Como resultado, o núcleo é gerado, mas ainda não pode ser lido por gdb
. Aqui está a saída de 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 ?? ()
E aqui está a saída do comando file
:
core.3506: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './a.out'
E o começo de ulimit -a
:
core file size (blocks, -c) unlimited
E o eco da saída /proc/sys/kernel
mais importante:
cat /proc/sys/kernel/core_pattern
core
cat /proc/sys/kernel/core_uses_pid
1
cat /proc/sys/kernel/core_pipe_limit
0
Minha pergunta é o que estou fazendo errado? Como posso gerar um arquivo principal, que será lido por gdb
?
Parece que o seu elf está sem símbolos de depuração. Talvez seja apenas compilando com
g++ -g -rdynamic -o main main.cpp