GDB не показывает имена функций - PullRequest
12 голосов
/ 05 декабря 2011

Я отлаживаю со встроенного устройства, используя gdbserver:

./gdbserver HOST:5000 /home/test_app

На моем ПК я выполняю gdb следующим образом:

arm-none-linux-gnueabi-gdb test_app

Как только приложение выполняется, я получаю Segfault, который хочу отладить, но невозможно узнать, какая строка его произвела:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 715]
0x31303030 in ?? ()
(gdb) bt
#0  0x31303030 in ?? ()
#1  0x0000dff8 in ?? ()
#2  0x0000dff8 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

(я должен сказать, что я совершенно новичок в GDB)

Ответы [ 2 ]

15 голосов
/ 06 декабря 2011

Хорошо, это обычно происходит, если отсутствуют символы отладки ... просто чтобы убедиться, что выполняются следующие команды

file <your_executable>

вы получите информацию о вашем бинарном формате, формате, арке и т. Д. В последней части информации описывается, если бинарный файл удален или нет. Для отладки в GDB двоичный файл не должен быть удален.

nm --debug-sym <your_executable> | grep debug

Если у вас есть несколько допустимых отпечатков, как показано ниже, это означает, что присутствуют символы отладки.

00000000 N .debug_abbrev
00000000 N .debug_aranges
00000000 N .debug_frame
00000000 N .debug_info
00000000 N .debug_line
00000000 N .debug_loc
00000000 N .debug_pubnames
00000000 N .debug_str

Далее, когда вы вызываете GDB, у вас должна быть следующая строка

Reading symbols from <your_executable>...done.

На этом этапе вы сможете составить список источников с помощью команды list.

Убедитесь, что оба gdb и gdbserver имеют одинаковую версию.

arm-none-linux-gnueabi-gdb --version
./gdbserver --version

Если все вышесказанное верно, и вы все еще не получаете обратный след, в вашем стеке происходит что-то плохое. Попробуйте запустить статический анализ, valgrind для вашего кода / недавно добавленный код.

5 голосов
/ 05 декабря 2011

Вам необходимо создать приложение с включенными символами отладки. Переключатель для GCC -g

...