Herramienta para rastrear llamadas a funciones locales en Linux

Estoy buscando una herramienta comotraza ostrace que puede rastrear funciones definidas localmente en un ejecutable. ltrace solo rastrea las llamadas de la biblioteca dinámica y strace solo rastrea las llamadas del sistema. Por ejemplo, dado el siguiente programa C:

#include <stdio.h>

int triple ( int x )
{
  return 3 * x;
}

int main (void)
{
  printf("%d\n", triple(10));
  return 0;
}

Ejecutando el programa conltrace mostrará la llamada aprintf ya que es una función de biblioteca estándar (que es una biblioteca dinámica en mi sistema) ystrace mostrará todas las llamadas del sistema desde el código de inicio, las llamadas del sistema utilizadas para implementar printf y el código de apagado, pero quiero algo que me muestre que la funcióntriple fue llamado. Suponiendo que las funciones locales no han sido alineadas por un compilador optimizador y que el binario no ha sido eliminado (símbolos eliminados), ¿hay alguna herramienta que pueda hacer esto?

Editar

Un par de aclaraciones:

Está bien si la herramienta también proporciona información de rastreo para funciones no locales.No quiero tener que volver a compilar los programas con soporte para herramientas específicas, la información del símbolo en el ejecutable debería ser suficiente.Sería realmente agradable si pudiera usar la herramienta para adjuntar a procesos existentes como puedo con ltrace / strace.

Respuestas a la pregunta(13)

Su respuesta a la pregunta