Как отделить символы отладки от библиотеки C stati c и затем загрузить ее в GDB - PullRequest
3 голосов
/ 29 апреля 2020

У меня есть библиотека stati c, созданная из объектных файлов, которые были скомпилированы с флагом "-g". Я выделяю отладочную информацию этой библиотеки stati c в отдельный файл, такой как: objcopy --only-keep-debug lib_mylib.o lib_mylib.o.debug

, а затем связываю свое приложение с этой библиотекой stati c (после удаления отладочной информации из нее) как gcc -g driver.c -o driver -L. -l_mylib

Может ли кто-нибудь подсказать, как загрузить отладочную информацию из библиотеки stati c из lib_mylib.o.debug в GDB, чтобы я мог отлаживать код, предоставленный библиотеками stati c, в моем приложении? Я получаю ниже ошибку в GDB при попытке загрузить его с помощью команды add-symbol-file:

(gdb) add-symbol-file lib_mylib.a.debug 0x0
add symbol table from file "lib_mylib.a.debug" at
    .text_addr = 0x0
(y or n) y
`/home/sbunny/tmp/static-lib/lib_mylib.a.debug': can't read symbols: File format not recognized.

1 Ответ

1 голос
/ 29 апреля 2020

Не делайте этого:

objcopy --only-keep-debug lib_mylib.o lib_mylib.o.debug

(Работает только для общих библиотек.)

Сделайте это вместо:

cp lib_mylib.o lib_mylib.o.debug

Еще проще сохранить lib_mylib.o нетронутым и удалить символы отладки из исполняемого файла во время соединения:

gcc -g driver.c -o driver -L. -l_mylib -Wl,-s

И еще проще: свяжите двоичный файл с информацией отладки и сохраните его для отладки, но используйте раздетый исполняемый файл там, где вам нужно это будет удалено:

gcc -g driver.c -o driver-dbg -L. -l_mylib &&
strip -g -o driver driver-dbg

С вышеприведенным вам не нужно будет add-symbol-file, просто укажите GDB на driver-dbg, и он все сделает автоматически.

...