Инструмент Solaris для отслеживания API библиотеки

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

Я пробовал truss, он не показывает некоторые библиотечные API, которых я ожидал. Есть ли какой-нибудь инструмент в Solaris, например ltrace в Linux, который отслеживает вызовы библиотеки? Предоставляет ли dtrace эту информацию?

2 ответа

Есть два способа получить желаемое:

  • sotruss
  • Поставщик pidDTrace

В sotruss полезность

В sotruss документация по утилите:

сотрусс

  • отслеживать вызовы процедур разделяемой библиотеки

Синопсис

/usr/bin/sotruss [-f] [-F bindfromlist] [-T bindtolist] 
    [-o outputfile] executable [executable arguments...]

Описание

sotrussвыполняет указанную команду и производит трассировку вызовов библиотеки, которые она выполняет. Каждая строка выходных данных трассировки сообщает, какие привязки происходят между динамическими объектами при выполнении каждого вызова процедуры.sotrussотслеживает все вызовы процедур, которые происходят между динамическими объектами, через таблицу связи процедур, поэтому будут отслеживаться только те вызовы процедур, которые связаны через таблицу связи процедур. См. Руководство по компоновщику и библиотекам

Параметры

Поставщик pidDTrace

Согласно руководству Solaris 10 DTrace:

pid Провайдер

В pidProvider позволяет отслеживать любую инструкцию в процессе. В отличие от большинства других провайдеров,pidзонды создаются по запросу на основе описаний зондов, найденных в ваших программах D. В результате в выводе команды не отображаются датчики pid.dtrace -l пока вы сами их не включите.

Трассировка границ пользовательских функций

Самый простой режим работы для провайдера pid - это аналог пользовательского пространства для провайдера fbt. В следующем примере программы отслеживаются все записи функций и возвращаемые значения, сделанные из одной функции. В$1макропеременная (первый операнд в командной строке) - это идентификатор процесса, который нужно отслеживать. В$2 макропеременная (второй операнд в командной строке) - это имя функции, из которой следует отслеживать все вызовы функций.

...

Также см . Блог Брендана Грегга для получения дополнительной информации о DTrace:

Поставщик pidDTrace

Поставщик "pid" DTrace позволяет отслеживать внутреннее выполнение таких процессов, как веб-браузер или база данных. Это задокументировано в исходном руководстве по DTrace и в готовящейся к выпуску книге DTrace. Он также мощный и нестабильный, и из него вы, скорее всего, выстрелите себе в ногу.

Здесь я представлю поставщика pid и расскажу о стабильности имен проб, включая советы и подводные камни. Это должно быть полезным фоном для всех, кто использует DTrace, включая запуск сценариев DTrace на основе pid-провайдера других людей. Для дальнейшего чтения см. Мой полный список сообщений провайдера pid.

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

Другие вопросы по тегам