Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exceptions auswerten (https://www.delphipraxis.net/59593-exceptions-auswerten.html)

Matze 25. Dez 2005 12:40


Exceptions auswerten
 
Hi,

um evtl. auftretende Exceptions leicht auswerten zu können, bin ich dabei, einen Fehlerreport zu basteln. Damit dieser zuverlässig ist, habe ich mir gedacht, ich weise in jeder Prozedur/Funktion einer globalen Variablen den Namen der Prozedur zu. Doch ist das irgendwie nicht sehr zuverlässig, da bei folgendem Beispiel, die Variable den Namen der falschen Prozedur enthällt:

Delphi-Quellcode:
procedure xyz;
begin
  error_proc_fct := 'xyz';

  Do_something; // Aufruf einer anderen Peozedur
 
  // Hier ist der Variableninhalt dann 'Do_something' und nicht, wie es sein sollte 'xyz'
  // tritt hier ein Fehler auf, bekomme ich logischerweise die falsche Prozedur übermittelt.
end;
Im Forum habe ich ein paar Threads dazu gefunden, doch sind das noch unzuverlässigere Methoden (Bsp: hier.
Ich möchte weder Madshi noch Eurekalog nutzen. Die Jedis habe ich installiert, falls es da was zuverlässiges gegen sollte.

Was könntet ihr mir da empfehlen?

jfheins 25. Dez 2005 12:50

Re: Exceptions auswerten
 
Baue dir gleich einen kompletten Callstack, sodass du z.B. schreibst:

Code:
Button1Click
xyz
Wenn du dann DoSomething audfufst, kommt noch DoSomething ans Ende:
Code:
Button1Click
xyz
DoSomething
und bei abschluss einer funktion einfach die letzte Zeile wieder entfernen ;)

So weißt du auch gleich, wie dein Programm dahin gelangt ist ;)

Matze 25. Dez 2005 12:52

Re: Exceptions auswerten
 
Ähm, das verstehe ich nicht ganz. Könntest du das bitte etwas genauer erläutern? :angle2:

Nachtrag: Achso, nun hab ich's doch verstanden, hm, das wäre eine Möglichkeit, wenn auch eine, die rechts aufwändig ist, danke.

jfheins 25. Dez 2005 12:59

Re: Exceptions auswerten
 
Du machst nicht nur eine Variable, sondern eine Stringlist, die als Callstack dient.

Jede Funktion/Prozedur schreibt am anfang ihren Namen hinen, also quasi Callstack.Add('xyz');
und löscht am Ende den letzten Eintrag.

Wenn du dann hast:

Delphi-Quellcode:

procedure Do_something;
begin
  Callstack.Add ('Do_something');

  // mach was

// hier ist er dann Button1Click; xyz; Do_something;
 
Callstack.DeleteLast;
end;

procedure xyz;
begin
  Callstack.Add ('xyz');

  Do_something; // Aufruf einer anderen Peozedur

  // wenn hier was passiert ist er wieder Button1Click; xyz;
 
Callstack.DeleteLast;
end;

procedure Button1Click;
begin
Callstack.Add ('Button1Click');
  xyz;
Callstack.DeleteLast;
end;
Alee Klarheiten beseitigt ? :mrgreen:

Matze 25. Dez 2005 13:01

Re: Exceptions auswerten
 
Zitat:

Zitat von jfheins
Alee Klarheiten beseitigt ? :mrgreen:

Jupp, thx. Hatte meinen Beitrag gerade editiert, denn nach dem 3. Mal durchlesen hab ich's verstanden gehabt. ^^

Stimmt schon, das müste gehen. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz