2015-08-06 1 views
1

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

Я хочу, чтобы поместить в мой исходный код на

- (поставщик точек трассировки, имя, ...)

заявление на каждом входе функции и точки выхода.

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

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

ответ

1

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

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

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

Дополнительную информацию см. В документации к Function Tracing.

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

+0

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