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.

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) 

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.


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!


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.