Rückgabewert einer Funktion mittels Debugger auswerten
-
Hallo Zusammen,
ich habe mal eine generelle Frage. Ist es möglich den Rückgabewert einer Funktion zu ermitteln (CBuilder XE)? Ich hatte schon öfter das Problem, dass ich gerne den Rückgabewert einer Funktion untersuchen wollte, aber keinen Wert angezeigt bekomme weil der Rückgabewert nicht Funktionslokal ist. Gibt es eine Möglichkeit diesen Wert mittels Debugger zu untersuchen?Bsp.:
int __fastcall TClass::iGetValue()
{
return iGetValue1();
}Ich habe schon versucht die Funktion zu den "überwachten Ausdrücken" einzufügen. Dort bekomme ich aber nur den Funktionszeiger aufgelöst, aber nicht den Rückgabewert. Ich habe auch schon den Haltepunkt an die schliessende Klammer der Funktion gesetzt, aber auch da habe ich bisher noch keine Möglichkeit gefunden den Rückgabewert zu untersuchen.
Im Voraus schon einmal Danke für Antworten.
-
mach einfach in der Funktion:
int Dummy=iGetValue1();
return Dummy;ODER in Aufrufender Funktion:
int Dummy=???->iGetValue1();Gruss
Frank
-
Was du machen kannst:
- einen Haltepunkt auf den Funktionsaufruf setzen, dann im Evaluator (Strg+F7) den Funktionsaufruf eintippen, also "iGetValue1()". Vorsicht aber, wenn die Funktion Nebenwirkungen hat und nicht nur den Wert ausrechnet, denn sie wird dann ein zweites Mal aufgerufen.
- ein
int
wird bei den meisten (allen?) Aufrufkonventionen im Register EAX (bzw. RAX bei 64-Bit-Windows) zurückgegeben. Nach der Rückkehr aus dem Funktionsaufruf öffne die CPU-Ansicht und betrachte den Wert des EAX-Registers. Oder tippe im Evaluator "EAX" ein.
-
Hallo Zusammen,
danke für die Antworten.@DerAltenburger: Temporäre (funktionslokale) Variablen wollte ich vermeiden. Ich möchte direkt den Wert haben ohne Quellcode Ergänzung, Neu erzeugen und dann wieder bis zur gewünschten Stelle debuggen. Dein Vorschlag war auch meine bisherige Vorgehensweise. Danke.
@audacia: Das habe ich gesucht und werden es künftig einsetzen. Vielen Dank.
Gruß
-
In die Funktion steppen und dann "ausführen bis Rücksprung". Eine andere Möglichkeit kenne ich nicht.