gdb: “Nenhuma tabela de símbolos carregada”

90

Continuo recebendo essa mensagem de erro ao tentar adicionar um ponto de interrupção no gdb.

Usei estes comandos para compilar:

gcc -g main.c utmpib2.c -o main.o
and:
cc -g main.c utmpib2.c -o main.o
and also:
g++ -g main.c utmpib2.c -o main.o

Também tentei "-ggdb" em vez de "-g" e ainda recebo essa mensagem de erro.

Em seguida, executo o gdb:

$gdb

No gdb:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.
usuário994165
fonte
Oh, eu quis dizer main.o. Eu atualizei. Também tentei usar "-ggdb" e ainda está me dando o mesmo problema.
user994165
Mostre-nos exatamente como você está chamando gcc e gdb. Copie e cole para evitar erros.
Piotr Praszmo
1
Eu atualizei meus comandos. Isso é muito estranho. Apenas começou a funcionar. Eu sei que anteriormente estava acessando gdb usando "gdb a.out" e estava recebendo uma mensagem de erro sobre a.out não existir ou algo assim. Então mudei para o "arquivo exec". Agora tentei com a.out e ele diz "Este GDB foi configurado como" i486-linux-gnu "" e os pontos de interrupção podem ser definidos.
usuário994165
oh duh eu estava especificando o arquivo errado a.out. Segui um tutorial do gdb sem pensar em mudar o nome do arquivo para o meu próprio.
user994165

Respostas:

58

Em primeiro lugar, o que você tem é um programa totalmente compilado, não um arquivo-objeto, então elimine a .oextensão. Agora, preste atenção ao que a mensagem de erro diz, ela diz exatamente como corrigir o seu problema: "Nenhuma tabela de símbolos está carregada. Use o comando" arquivo " ."

(gdb) exec-file test
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file test
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

Ou apenas passe o programa na linha de comando.

$ gdb test
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[...]
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 
Kevin
fonte
Desculpe, sou um novato gdb. Esta solução (e nenhuma das outras soluções para esta questão) funciona com gdb em WSL no Windows, você tem alguma sugestão para mim?
aderchox
139

Você deve adicionar o parâmetro extra -g, que gera informações de depuração no nível de origem. Será parecido com:

gcc -g prog.c

Depois disso, você pode usar o gdb de maneira comum.

kralex
fonte
25
No meu caso, essa resposta resolveu o problema para mim, enquanto a resposta aceita não fez diferença.
Frankster,
8

Estou com o mesmo problema e segui este Post , resolveu meu problema.

Siga as 2 etapas a seguir:

  1. Certifique-se de que o nível de otimização seja -O0
  2. Adicionar -ggdbsinalizador ao compilar seu programa

Boa sorte!

Charles Chow
fonte
0

Sempre que gcca máquina de compilação e gdb a máquina de teste têm versões diferentes , você pode estar enfrentando incompatibilidade de formato de debuginfo .

Para corrigir isso, tente fazer o downgrade do formato debuginfo:

gcc -gdwarf-3 ...
gcc -gdwarf-2 ...
gcc -gstabs ...
gcc -gstabs+ ...
gcc -gcoff ...
gcc -gxcoff ...
gcc -gxcoff+ ...

Ou combine gdbcom o que gccvocê está usando.

Ulidtko
fonte
0

Eu encontrei esse problema esta manhã porque usei o mesmo executável em sistemas operacionais DIFERENTES: após compilar meu programa com gcc -ggdb -Wall test.c -o testno meu Mac (10.15.2), executei gdbcom o executável no Ubuntu (16.04) no meu VirtualBox.

Correção: recompilar com o mesmo comando no Ubuntu, então você deve estar bem.

Wenhe Qi
fonte