2016-09-07 7 views
3

Ich versuche, mich selbst wie Backtrace Funktionsaufruf zu implementieren. Ich bin erfolgreich in der Lage gewesen, Stapel zu entpacken, und ich habe alle Rückkehradresse, die auf meinem Stapel vorhanden ist. Jetzt möchte ich Funktionsname, Variablennameneingabe zu meiner Funktion von diesen Informationen erhalten. Ich möchte das auch programmatisch machen, d. H. Zur Laufzeit sollte ich in der Lage sein, Informationen über alle bisher in meinem Programm aufgerufenen Funktionen zu bekommen. Nehmen wir an, ich bin in Ordnung compiling meine mit-g-Flag beim Kompilieren.Befehlszeiger auf Funktionsname, Eingabeparameter,?

Ich versuche, dladdr() -Funktion zu verwenden, um Funktionsname zu erhalten, aber das hat nicht funktioniert. Es gibt mir den Fehler, dass "Fehler: unbekannter Typname 'Dl_info'". Hier ist mein Code-Schnipsel:

const char * get_func_name(void *ip){ 
     Dl_info info; 
     int ret; 
     ret = dladdr(ip,&info); 
     if(ret < 0) 
       return NULL; 
     return info.dli_fname; 
} 

I BFD-Bibliothek versucht, die Nachforschungen anstellen, aber nur knapp sein Ziel haben gutes Beispiel/Tutorial, jede mögliche Hilfe? Ich benutze Ubunutu 14.04

Antwort

2

Pro die man-Seite, sicher sein vor dir #include <dlfcn.h>. Diese Struktur und dladdr() sind GNU-Erweiterungen.