function — автоматически вставляет операторы точек трассировки в C ++, используя liblttng

Я работаю с приложением C ++ в пользовательском пространстве и использую набор инструментов трассировки Linux, который предоставляет точки трассировки (поставщик, имя и т. Д.).

Я хочу разместить в своем исходном коде

— Точка (поставщик, имя, …)

оператор на каждой точке входа и выхода функции.

Это возможно автоматизировать это каким-то образом? Размещать все это очень громоздко вручную.

Я хочу сделать это не так, как программирование аспектов.

1

Решение

Вы можете использовать liblttng-ust-cyg-profile.so вспомогательная библиотека для получения точек трассировки LTTng-UST из каждой функции входа и выхода.

  • Перекомпилируйте программу с -g -finstrument-functions,
  • Запустите его, предварительно загрузив вспомогательную библиотеку:
    • LD_PRELOAD=/path/to/liblttng-ust-cyg-profile.so ./myApp

Это будет генерировать события трассировки для каждого инструментированного входа и выхода из функции. Обратите внимание, что точки трассировки будут содержать только адреса функций, а не имена. Это ограничение профиля cyg. Чтобы сопоставить их с именами функций, вы можете использовать утилиту, такую ​​как addr2line,

Увидеть Отслеживание функций часть документации для более подробной информации.

В зависимости от количества инструментальных функций это может оказать незначительное влияние на производительность. Также, -finstrument-functions технически должен работать с приложениями C ++, но это может быть сложно. У меня был сбой при компиляции с большими нетривиальными приложениями C ++. Ваш пробег может отличаться.

1

Другие решения


По вопросам рекламы [email protected]