Intereting Posts
Печать квадратной матрицы с помощью указателей Как скомпилировать программу C без какой-либо оптимизации Win32: Диалоговое окно панели инструментов, похоже, никогда не фокусируется и заставляет основное окно работать медленно? Оптимизированный способ обработки чрезвычайно большого количества без использования внешней библиотеки Прерывания в UART 16550 и ядре Linux Случайный массив с множеством чисел, получающих ошибку Почему malloc выделяет другое количество байтов, чем запрошено? Получение неограниченного ввода в C? Почему (и когда) мне нужно использовать круглые скобки после sizeof? Вызов метода Rust из C с параметрами массива Возвращает ли rand () ноль на OSX? Как проверить буфер stdin содержит некоторые данные? Оптимизация компилятора, заставляющая программу работать медленнее Использовать функцию внутри функции из другого .c файла? Увеличить окно SDL

Как загрузить несколько файлов символов в gdb

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

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

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

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

 set debug-file-directory  

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

 show debug-file-directory 

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

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


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

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

add-symbol-file имя файла

add-symbol-file имя_файла [-readnow] [-mapped]

add-symbol-file имя_файла -ssection адрес …

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

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

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

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

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

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

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

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

Здесь у вас есть пример использования readelf для двоичных файлов. readelf адрес, в котором было загружено имя файла [GDB]

Вместо того, чтобы пытаться загружать символы вручную в нужное место, я нашел более удобным слияние символов обратно с разделенными исполняемыми eu-unstrip с помощью eu-unstrip а затем воспроизвести сбой с уже присутствующими символами.

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

 add-symbol-file filename address add-symbol-file filename address [ -readnow ] [ -mapped ] add-symbol-file filename -ssection address ... 

см. http://www.delorie.com/gnu/docs/gdb/gdb_125.html