gdb: “Не завантажена таблиця символів”


90

Я постійно отримую це повідомлення про помилку при спробі додати точку зупинки в 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.

О, я мав на увазі main.o. Я оновив його. Я спробував також використовувати "-ggdb", і це все ще дає мені ту ж проблему.
user994165

Покажіть нам, як саме ви використовуєте gcc та gdb. Скопіюйте-вставте, щоб уникнути помилок.
Piotr Praszmo

1
Я оновив свої команди. Це справді дивно. Це тільки почало працювати. Я знаю, що раніше я отримував доступ до gdb за допомогою "gdb a.out", і я отримував повідомлення про помилку про a.out, який не існує чи щось інше. Потім я перейшов на "exec-файл". Зараз я спробував за допомогою a.out, і там написано "Цей GDB був налаштований як" i486-linux-gnu "", і точки зупинку можна встановити.
user994165

о, так, я вказував неправильний файл a.out. Я пішов за підручником з gdb, не думаючи змінити ім'я файлу на своє.
user994165

Відповіді:


58

Перш за все, у вас є повністю скомпільована програма, а не об’єктний файл, тому скиньте .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) 

Вибачте, я gdb noob. Це рішення (і жодне з інших рішень з цього питання) не працює з gdb на WSL у Windows, чи маєте ви пропозицію щодо мене?
aderchox

140

Вам потрібно додати додатковий параметр -g, який генерує інформацію про налагодження на рівні джерела. Це буде виглядати так:

gcc -g prog.c

Після цього ви можете використовувати gdb загальноприйнятим способом.


26
У моєму випадку ця відповідь вирішила проблему для мене, тоді як прийнята відповідь не мала значення.
frankster

8

У мене така сама проблема, і я підписався на цю публікацію , це вирішило мою проблему.

Виконайте наступні 2 кроки:

  1. Переконайтесь, що рівень оптимізації є -O0
  2. Додайте -ggdbпрапор під час складання вашої програми

Удачі!


0

Всякий раз, коли gccна машині компіляції та gdb на тестовій машині є різні версії , ви можете зіткнутися з несумісністю формату debuginfo .

Щоб це виправити, спробуйте знизити формат debuginfo:

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

Або підійдіть gdbдо того, gccщо ви використовуєте.


0

З цим питанням я познайомився сьогодні вранці, тому що використовував той самий виконуваний файл у РІЗНИХ ОС: після компіляції моєї програми gcc -ggdb -Wall test.c -o testна моєму Mac (10.15.2) я побіг gdbіз виконуваним файлом в Ubuntu (16.04) у своєму VirtualBox.

Виправлення: перекомпілюйте за допомогою тієї ж команди під Ubuntu, тоді ви повинні бути добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.