Aufrufende Procedure ausgeben

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Aufrufende Procedure ausgeben

Beitrag von monta »

Ist es irgendwie möglich, bei einem Procedureaufruf in der aufgerufenen Procedure den Namen der aufrufenden Procedure zu erhalten und als string weiter zu verarbeiten.

Beispiel:

Code: Alles auswählen

procedure tueetwas;
begin
  ZeigeAufruf;
end;
 
procedure ZeigeAufruf;
begin
  Showmessage('Aurufende Procedure: ' {???});
end;
:?:

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Aufrufende Procedure ausgeben

Beitrag von theo »

Nicht dass ich wüsste.
Du kannst natürlich einen Parameter mitgeben.

Was wäre denn der Sinn der Sache?

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Vielleicht auf Umwegen über globale Variablen?

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Sollte eigentlich eine Art Logdatei werden, um den Programmablauf aufzuzeichnen, indem ich nur die entsprechende Funktion das entsprechenden Objekts aufrufe.
Momentan übergeb ich jeweils schon beim Aufruf nen String, ich hatte aber gehofft, das sich das schon weitgehend automatisieren liese,

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

geht schon, aber nur wenn die debugsymbole noch im executable sind. dann kannst du die benutzen um über den stack rauszukriegen was was aufgerufen hat. und für alle die jetzt gleich wieder schreien wollen das das ja viel zu aufwendig und komplex zu implementieren ist lazarus bringt implementationen mit
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

und wie genau komm ich an die debugsymbole um sie mit dem Stack zu referenzieren?

Oder anders gefragt, wo sind die genau implementiert?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Code: Alles auswählen

bp:=get_caller_frame(get_frame); //bp ist Pointer
addr:=get_caller_addr(bp);//addr auch
CurAddress:=GetLineInfo(addr,UseCache);//CurAddress ist Shortstring
in CurAddress hast jetzt den Namen der aktuellen procedure oder function

bp:=get_caller_frame(bp); holt dir die stack adresse von der aufrufenden wenn keine aufgerufende da ist, ist bp nil ansonsten kannst du das spiel von vorn anfangen und wenn du willst den ganzen stack durchrödeln.

wenn aber keine debugsymbole im executable sind bleibt CurAddress Lehr und du hast lediglich die Adresse in addr.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Danke.

Aber:

Code: Alles auswählen

CurAddress:=GetLineInfo(addr,UseCache);//CurAddress ist Shortstring
ist irgendwie unklar.

Meinst du GetLineInfo aus den CutomCodeTools nur das ist doch ne Prozedure ? :roll:

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nö, ich mein GetLineInfo aus der LCLProc
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ah, danke, funktioniert super, und solange ich es brauche, bleiben die Debuginfos halt drin.

Antworten