Gdb: "Таблица символов не загружена"

Я продолжаю получать эту ошибку mesage при попытке добавить точку останова в gdb.

Я использовал эти команды для компиляции:

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

Я также попробовал "-ggdb" вместо "-g", и я до сих пор получаю это сообщение об ошибке.

Затем я запускаю gdb:

$gdb

В gdb:

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

Ответ 1

Прежде всего, у вас есть полностью скомпилированная программа, а не объектный файл, поэтому отпустите расширение .o. Теперь обратите внимание на то, что говорится в сообщении об ошибке, в котором говорится о том, как исправить вашу проблему: "Таблица символов не загружена. Используйте команду" файл "."

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

Или просто передайте программу в командной строке.

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

Ответ 2

Вам нужно добавить дополнительный параметр -g, который генерирует информацию об отладке исходного уровня. Он будет выглядеть так:

gcc -g prog.c

После этого вы можете использовать gdb обычным способом.

Ответ 3

У меня такая же проблема, и я последовал за этой Post, она решила мою проблему.

Выполните следующие шаги:

  • Убедитесь, что уровень оптимизации -O0
  • Добавить -ggdb флаг при компиляции вашей программы

Удачи!