Описание тега ltrace

NoneLtrace - это трассировщик вызовов библиотеки. Это утилита отладки в Linux, используемая для отображения вызовов, которые пользовательское приложение делает к разделяемым библиотекам.

Описание:

ltraceэто программа, которая просто выполняет указанную команду до ее завершения. Он перехватывает и записывает вызовы динамической библиотеки, которые вызываются исполняемым процессом, и сигналы, получаемые этим процессом. Он также может перехватывать и печатать системные вызовы, выполняемые программой.

Пакет:

ltrace

Применение:

Ознакомьтесь с полным списком опций и их использованием на странице руководства.

Открытие библиотеки прототипов:

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

После отображения библиотеки ltrace узнает, что это SONAMEявляется. Затем он ищет файл с именемSONAME.conf например, библиотека прототипов для libc.so.6 будет в файле с именем libc.so.6.conf. Когда такой файл найден,ltrace читает все хранящиеся в нем прототипы.

  • Когда точка входа в таблицу символов (например, отмеченная-x), прототип ищется в библиотеке прототипов, соответствующей библиотеке, в которой произошло попадание.
  • Когда вызов библиотеки (например, отслеживаемый -e а также -l), прототип ищется во всех библиотеках прототипов, загруженных для данного процесса. Это необходимо, поскольку вызов библиотеки отслеживается в таблице PLT вызывающей библиотеки, но прототип описывается в вызываемой библиотеке.

Если в библиотеке нет SONAME, вместо него рассматривается базовое имя файла библиотеки. Для основного двоичного файла программы также учитывается базовое имя (например, библиотека прототипов для/bin/echo будет называться echo.conf).

Если имя, соответствующее soname (например, libc.so.6.conf), не найдено, а рассматриваемый модуль является совместно используемой библиотекой, ltrace также пробует частичные совпадения. ltraceотсекает один период за другим, повторяя поиск, пока либо не будет найден протолиб, либо все, что останется, - это X.so. Таким образом, будет рассматриваться libc.so.conf, но не libc.conf.

При поиске библиотеки прототипов ltraceпотенциально просматривает несколько каталогов. В Linux это$XDG_CONFIG_HOME/ltrace, $HOME/.ltrace, X/ltrace для каждого X в $XDG_CONFIG_DIRS а также /usr/share/ltrace. Если переменная средыXDG_CONFIG_HOME не определено, ltrace смотрит в $HOME/.config/ltrace вместо.

Также есть механизм загрузки устаревших файлов конфигурации. Если $HOME/.ltrace.confсуществует, он импортируется в каждую загруженную библиотеку прототипов. Аналогично для/etc/ltrace.conf. Если оба существуют, оба импортируются, и$HOME/.ltrace.conf консультируется перед /etc/ltrace.conf.

Если -F содержит любые каталоги, они ищутся в порядке приоритета по сравнению с указанными выше системными каталогами в том же порядке, в котором они упомянуты в -F. Любые файлы, переданные в-F импортируются аналогично предыдущим файлам конфигурации, указанным выше.

Ссылки:

  1. http://man7.org/linux/man-pages/man1/ltrace.1.html
  2. http://en.wikipedia.org/wiki/Ltrace
  3. http://linux.die.net/man/1/ltrace
  4. man ltrace на машине Linux.