Ferramenta para rastrear chamadas de função local no Linux
Estou à procura de uma ferramenta comoltrace outraço que pode rastrear funções definidas localmente em um executável. O ltrace rastreia apenas as chamadas de biblioteca dinâmica e o rastreio rastreia apenas as chamadas do sistema. Por exemplo, dado o seguinte programa C:
#include <stdio.h>
int triple ( int x )
{
return 3 * x;
}
int main (void)
{
printf("%d\n", triple(10));
return 0;
}
Executando o programa comltrace
mostrará a chamada paraprintf
já que essa é uma função de biblioteca padrão (que é uma biblioteca dinâmica no meu sistema) estrace
mostrará todas as chamadas do sistema a partir do código de inicialização, as chamadas do sistema usadas para implementar printf e o código de desligamento, mas quero algo que me mostre que a funçãotriple
foi chamado. Supondo que as funções locais não tenham sido delineadas por um compilador otimizador e que o binário não tenha sido removido (símbolos removidos), existe uma ferramenta que pode fazer isso?
Editar
Alguns esclarecimentos:
Não há problema se a ferramenta também fornecer informações de rastreamento para funções não locais.Não quero recompilar o (s) programa (s) com suporte para ferramentas específicas, as informações do símbolo no executável devem ser suficientes.Eu seria muito legal se pudesse usar a ferramenta para anexar aos processos existentes, como posso com o ltrace / strace.