2013-12-04 3 views
20

Как загрузить несколько файлов символов в gdb. У меня есть исполняемый файл foo.out и загрузка модуля bar.so. Я создал два файла символов foo.symbol и bar.symbol. Как загрузить оба файла в gdb.Как загрузить несколько файлов символов в gdb

# gdb --core core 
# (gdb) 
# (gdb) symbol-file foo.symbol 

Как загрузить второй файл символов. Или есть ли способ, чтобы загрузить все файлы каталога в gdb

ответ

9

Чтобы установить каталог, содержащий файл символов использовать

set debug-file-directory <directory> 

и использовать

show debug-file-directory 

, чтобы показать, что в настоящее время находится в директории содержащих файлы символов.

Файлы символов автоматически считываются из этого каталога, если их имя (без пути) предоставляется двоичным кодом в терминах отладочной ссылки.


Чтобы добавить дополнительные символы, вы можете использовать add-symbol-file.

(как gdb onlinedocs, кажется, быть недоступны в данный момент я привожу это здесь)

надстройка символ-файл имя_файл адреса

надстройка символ-файл имя файла адрес [-readnow] [- сопоставляются]

надстройку символ-файл имя_файла -ssection адрес ...

надстройка символ-файл команда считывает дополнительную информацию таблицы символов из файла имя файла. Вы должны использовать эту команду, когда имя файла было динамически загружено (другими способами) в запущенную программу. адрес должен быть адресом памяти, на котором был загружен файл; gdb не может понять это сам. Вы можете дополнительно указать произвольное количество пар «-ssection address», чтобы указать явное имя раздела и базовый адрес для этого раздела. Вы можете указать любой адрес в качестве выражения.

Таблицу символов файла имя файла добавляется в таблицу символов, первоначально прочитанную командой символьного файла. Вы можете использовать команду add-symbol-file любое количество раз; Таким образом, новые данные символа продолжают добавлять к старым. Чтобы отбросить все старые данные символа, используйте команду symbol-file без каких-либо аргументов.

Хотя имя файла обычно является файлом общей библиотеки, исполняемым файлом или каким-либо другим объектным файлом, который был полностью перемещен для загрузки в процесс, вы также можете загрузить символическую информацию из перемещаемых файлов .o, если:

  • символическая информация к файлу относится только к символам компоновщика, определенных в этом файле, а не символов, определенных другими объектными файлами,
  • каждый раздел символической информации к файлу относится к фактически был загружен в низшее, как кажется в файле и
  • вы можете определить добавление которые были загружены в каждую секцию, и предоставить их команде add-symbol-file.

Некоторые встроенные операционные системы, такие как Sun Chorus и VxWorks, могут загружать перемещаемые файлы в уже запущенную программу; такие системы, как правило, упрощают выполнение требований выше. Тем не менее, важно признать, что многие собственные системы используют сложные процедуры ссылок (например, факторинг секции linklink и сборка компоновщика C++), что затрудняет выполнение требований. В общем случае нельзя предположить, что использование файла-символа-символа для чтения символической информации перемещаемого объектного файла будет иметь тот же эффект, что и обычный способ перемещения перемещаемого объектного файла в программу.

add-symbol-file не повторяется, если вы нажмете после его использования.

Вы можете использовать опции -readnow -mapped' and так же, как с помощью команды symbol-file, чтобы изменить способ управления gdb информацией о таблице символов для имени файла.

+0

Я пробовал это, но он не загружает файлы символов из указанной директории –

+0

Вы загружаете bar.so динамически? Имеет ли он связь отладки? – alk

+0

Да bar.so динамически связывается и не содержит символов. У меня есть файл символов bar.symbol –

5

В дополнение к ответу алка и его комментариям, адрес указан в адресе раздела .text. Вы можете найти его с помощью readelf команды

Вот вам пример readelf использования для бинарных файлов The address where filename has been loaded is missing [GDB]

0

Вместо того, чтобы пытаться загрузить символы вручную в правильное Я нашел его более удобным для merge the symbols back to the stripped executables с eu-unstrip, а затем воспроизвести аватар с уже присутствующими символами.

Этот подход не зависит от символьных файлов, соответствующих схеме именования требуемой механизмов по разрешению пути (отладки ссылку и Идентификатор сборки), которые привыкания при установке debug-file-directory.

Смежные вопросы