Я работаю с приложением C ++ в пользовательском пространстве и использую набор инструментов трассировки Linux, который предоставляет точки трассировки (поставщик, имя и т. Д.).
Я хочу разместить в своем исходном коде
— Точка (поставщик, имя, …)
оператор на каждой точке входа и выхода функции.
Это возможно автоматизировать это каким-то образом? Размещать все это очень громоздко вручную.
Я хочу сделать это не так, как программирование аспектов.
Вы можете использовать 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 ++. Ваш пробег может отличаться.