Подтвердить что ты не робот

Не найдены символы отладки при использовании gdb

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

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

Большое спасибо заранее,

4b9b3361

Ответ 1

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

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

Ответ 2

Самая частая причина отсутствия "отладочных символов", когда присутствует -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.

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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