Tool zur Verfolgung lokaler Funktionsaufrufe unter Linux

Ich suche ein Werkzeug wie ltrace oder strace das lokal definierte Funktionen in einer ausführbaren Datei verfolgen kann. ltrace verfolgt nur dynamische Bibliotheksaufrufe und strace verfolgt nur Systemaufrufe. Zum Beispiel mit dem folgenden C-Programm:

#include <stdio.h>

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

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

Programm mit @ startltrace zeigt den Anruf anprintf da dies eine Standardbibliotheksfunktion ist (die auf meinem System eine dynamische Bibliothek ist) undstrace zeigt alle Systemaufrufe vom Startcode, die Systemaufrufe zum Implementieren von printf und den Shutdown-Code, aber ich möchte etwas, das mir zeigt, dass die Funktiontriple hieß. Angenommen, die lokalen Funktionen wurden nicht von einem optimierenden Compiler eingebunden und die Binärdatei wurde nicht entfernt (Symbole wurden entfernt), gibt es ein Tool, das dies tun kann?

Bearbeite

Ein paar Klarstellungen:

Es ist in Ordnung, wenn das Tool auch Trace-Informationen für nicht lokale Funktionen bereitstellt.Ich möchte nicht, dass die Programme mit Unterstützung für bestimmte Tools neu kompiliert werden müssen. Die Symbolinformationen in der ausführbaren Datei sollten ausreichen. Ich wäre sehr nett, wenn ich das Tool verwenden könnte, um vorhandene Prozesse zu verknüpfen, wie ich es mit ltrace / strace kann.

Antworten auf die Frage(26)

Ihre Antwort auf die Frage