Archiv verlassen und diese Seite im Standarddesign anzeigen : Nächstes Problem: Funktionszeiger dereferenzieren zw. Debugging
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
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 ;(
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.
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.
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.
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 :).
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.