Инструмент для отслеживания локальных вызовов функций в 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.

Ответы на вопрос(13)

Ваш ответ на вопрос