Инструмент для отслеживания локальных вызовов функций в Linux
Я ищу такой инструмент, какltrace или жеТрассирование который может отслеживать локально определенные функции в исполняемом файле. ltrace отслеживает только динамические библиотечные вызовы, а strace only отслеживает системные вызовы. Например, дана следующая C-программа:
#include <stdio.h>
int triple ( int x )
{
return 3 * x;
}
int main (void)
{
printf("%d\n", triple(10));
return 0;
}
Запуск программы сltrace
покажет вызовprintf
так как это стандартная библиотечная функция (которая является динамической библиотекой в моей системе) иstrace
покажет все системные вызовы из кода запуска, системные вызовы, используемые для реализации printf, и код завершения работы, но я хочу что-то, что покажет мне, что функцияtriple
назывался. Предполагая, что локальные функции не были встроены оптимизирующим компилятором и что двоичный файл не был удален (символы удалены), есть ли инструмент, который может это сделать?
редактировать
Пара уточнений:
Это нормально, если инструмент также предоставляет информацию трассировки для нелокальных функций.Я не хочу перекомпилировать программу (ы) с поддержкой определенных инструментов, информации о символах в исполняемом файле должно быть достаточно.Я был бы очень рад, если бы я мог использовать инструмент для присоединения к существующим процессам, как я могу с помощью ltrace / strace.