gdb: "No se ha cargado ninguna tabla de símbolos"


90

Sigo recibiendo este mensaje de error cuando intento agregar un punto de interrupción en gdb.

He usado estos 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

También probé "-ggdb" en lugar de "-g" y todavía recibo ese mensaje de error.

Luego ejecuto gdb:

$gdb

En gdb:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.

Oh, me refiero a main.o. Lo actualicé. Intenté también usar "-ggdb" y todavía me da el mismo problema.
user994165

Muéstrenos exactamente cómo está invocando gcc y gdb. Copie y pegue para evitar errores.
Piotr Praszmo

1
Actualicé mis comandos. Esto es muy extraño. Simplemente empezó a funcionar. Sé que anteriormente estaba accediendo a gdb usando "gdb a.out" y recibía un mensaje de error sobre a.out que no existía o algo así. Luego cambié al "archivo exec". Ahora probé con a.out y dice "Este GDB se configuró como" i486-linux-gnu "" y se pueden establecer puntos de interrupción.
user994165

oh duh, estaba especificando el archivo incorrecto a.out. Seguí un tutorial de gdb sin pensar en cambiar el nombre del archivo por el mío.
user994165

Respuestas:


58

En primer lugar, lo que tiene es un programa completamente compilado, no un archivo objeto, así que elimine la .oextensión. Ahora, preste atención a lo que dice el mensaje de error, le dice exactamente cómo solucionar su problema: "No se ha cargado ninguna tabla de símbolos. Utilice el comando" archivo " .

(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) 

O simplemente pase el programa en la línea de comandos.

$ 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) 

Lo siento, soy un novato de gdb. Esta solución (y ninguna de las otras soluciones en esta pregunta) funciona con gdb en WSL en Windows, ¿tiene alguna sugerencia para mí?
aderchox

141

Debe agregar el parámetro adicional -g, que genera información de depuración a nivel de fuente. Se verá así:

gcc -g prog.c

Después de eso, puede usar gdb de manera común.


27
En mi caso, esta respuesta me resolvió el problema, mientras que la respuesta aceptada no hizo ninguna diferencia.
frankster

8

Tengo el mismo problema y seguí esta publicación , resolvió mi problema.

Siga los siguientes 2 pasos:

  1. Asegúrese de que el nivel de optimización sea -O0
  2. Agregue una -ggdbbandera al compilar su programa

¡Buena suerte!


0

Siempre que gccen la máquina de compilación y gdb en la máquina de prueba tengan versiones diferentes , es posible que se enfrente a una incompatibilidad de formato debuginfo .

Para solucionarlo, intente degradar el formato debuginfo:

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

O coincidir gdbcon el gccque está usando.


0

Me encontré con este problema esta mañana porque utilicé el mismo ejecutable en DIFERENTES SO: después de compilar mi programa gcc -ggdb -Wall test.c -o testen mi Mac (10.15.2), ejecuté gdbel ejecutable en Ubuntu (16.04) en mi VirtualBox.

Solución: vuelva a compilar con el mismo comando en Ubuntu, entonces debería estar bien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.