при использовании gdb не найдено символов отладки - PullRequest
34 голосов
/ 09 марта 2011

GNU GDB Fedora (6,8-37.el5) Kernal 2.6.18-164.el5

Я пытаюсь отладить свое приложение. Однако каждый раз, когда я передаю двоичный файл в GDB, он говорит:

(no debugging symbols found)

Вот вывод файла двоичного файла, и, как вы можете видеть, он не удален:

vid: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

Я компилирую со следующими CFLAGS:

CFLAGS = -Wall -Wextra -ggdb -O0 -Wunreachable-code

Может кто-нибудь сказать мне, если я скучаю по простому здесь?

Ответы [ 6 ]

43 голосов
/ 11 марта 2011

Наиболее частая причина «не найдены символы отладки», когда присутствует -g, заключается в том, что где-то в строке ссылки есть какой-то «случайный» аргумент -s или -S.

С man ld:

   -s
   --strip-all
       Omit all symbol information from the output file.

   -S
   --strip-debug
       Omit debugger symbol information (but not all symbols) from the output file.
27 голосов
/ 09 марта 2011

Приложение должно быть скомпилировано и связано с опцией -g.Т.е. вам нужно поставить -g как в CPPFLAGS, так и в LDFLAGS.

16 голосов
/ 09 марта 2011

Некоторые дистрибутивы Linux не используют символы отладки в стиле gdb. (IIRC они предпочитают dwarf2.)

В общем, gcc и gdb будут синхронизированы относительно того, какие символы отладки они используют, и форсирование определенного стиля только вызовет проблемы; если вы не знаете, что вам нужно что-то еще, используйте просто -g.

4 голосов
/ 30 августа 2011

Вы также должны попробовать -ggdb вместо -g, если вы компилируете для Android!

3 голосов
/ 19 августа 2017

Я знаю, что на этот вопрос давным-давно ответили, но недавно я часами пытался решить подобную проблему.Это локальный ПК под управлением Debian 8 с использованием Eclipse CDT Neon.2, удаленная плата ARM7 (Olimex) под управлением Debian 7. Цепочка инструментов - Linaro 4.9 с использованием gdbserver на удаленной плате и Linaro GDB на локальном ПК.Моя проблема заключалась в том, что сеанс отладки запускался и программа выполнялась, но точки останова не работали, и при ручной приостановке «источник не мог быть найден».Мои параметры строки компиляции (Linaro gcc) включали -ggdb -O0, как предлагали многие, но проблема все та же.В конце концов я попробовал gdb на удаленной плате, и он не жаловался на символы.Любопытно, что «file» сообщил об отладке, которая не была удалена на целевом исполняемом файле.

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

3 голосов
/ 11 марта 2011

Замените -ggdb на -g и убедитесь, что вы не удаляете двоичный файл с помощью команды strip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...