PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nächstes Problem: Funktionszeiger dereferenzieren zw. Debugging



7.e.Q
07-11-2006, 10:25
Hi Leute,

nächstes Problem... :) Ich muss zwecks Debugging herausfinden, wohin ein dynamisch eingehängter Funktionszeiger zeigt. Am besten den Namen der Funktion.

Idee?

Danke

Grüße,
Hendrik

PS: so ist das, wenn man mehrere Baustellen gleichzeitig bearbeiten muss... :p

ptr
07-11-2006, 12:31
Für solche Zwecke ist der GDB (GNU Debugger) entwickelt worden.

http://de.wikipedia.org/wiki/GNU_Debugger

Hab wohl ein Buch darüber im Schrank liegen, hab mich aber noch nicht überwinden können es zu lesen ;(

7.e.Q
07-11-2006, 16:51
Damit geht's jo. Nur leider nicht im laufenden Betrieb...

... damit meine ich, daß ich mir die Zeiger nur ausgeben kann, wenn ich den Lauf der Software unterbreche.

Boron
07-11-2006, 18:54
Lass dir doch zu dem Zeitpunkt wo es interessant ist die Adresse der Funktion geben. Zusätzlich besorgst du dir alle Adressen der in Frage kommenden Funktionen und schon weißt was Sache ist.

Den Namen einer Funktion kannst du zur Laufzeit nicht erfahren. Denn nach dem Übersetzen existieren keine "Namen" mehr, sondern nur noch Adressen.
Außer gehst mit einem Debugger an das Programm ran, das dann natürlich sämtliche Debuginfo enthalten muss.
Aber das scheidet ja aus, wie schon geschrieben hast.

7.e.Q
09-11-2006, 08:07
Wie lass ich mir denn die Adresse einer Funktion ausgeben? Wenn ich das da mache:



std::cout << pJob->pFunc << std::endl;


wobei pJob->pFunc der Zeiger auf die Funktion ist, erhalte ich als Ausgabe den Rückgabewert der Funktion... :o



std::cout << &pJob->pFunc << std::endl;


hingegen liefert mir die Adresse des Zeigers.

Boron
09-11-2006, 17:51
Müsste ich jetzt auch mal ausprobieren :o
Was bleibt denn noch übrig?

std::cout << pJob->&pFunc << std::endl; // liefert doch auch die Adresse des Zeigers?
std::cout << &(pJob->pFunc) << std::endl; // mein FavoritIch würde jetzt fleißig Sternchen und Und-Zeichen herumschubsen, bis es irgendwann stimmt :).