Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#10

AW: Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 24. Jul 2015, 20:37
Es gibt "try - except - end" und "try - finally - end"
Das stimmt. Aber try..finally hat nichts mit Exceptions zu tun! Das ist ein Ressourcenschutzblock und wird immer ausgeführt, egal was zwischen try und finally passiert, auch dort auftretende Exceptions ändern daran nichts. Übliche Verwendung eines try..finally :
Delphi-Quellcode:
var Lobject: TObject;
begin
  Lobject:= TObject.Create;
  try
    MachWas(Lobject);
  finally
    Lobject.Free;
  end;
end;
Egal, was nun in MachWas passiert, das Objekt wird mit Sicherheit freigegeben.

Anders ist das bei try..except . Dieses Konstrukt ist zum Fangen von Exceptions da. shmia hat dazu ein IMO wunderbares Tutorial geschrieben, wie man mit dem Konstrukt und Exceptions an sich umgehen sollte. Wichtigster Rat daraus: Exceptions mit eigenen, wichtigen und nützlichen Informationen anreichern, die bei der Fehlersuche und dessen Ursache(n) helfen können.

Zitat:
4)Wie sieht das aus wenn ich in OnDestroy etwas freigeben möchte aber z.B. in OnClose nichts gemacht wird. Schreibe ich jetzt "try-except-end" in ein leeres OnClose nur um sicherzugehen, dass ich das OnDestroy auch in jedem Fall erreichen kann.
Nein. Warum sollte eine leere Funktion eine Exception werfen?

Zitat:
Kann es sein, dass verschiedene Programme oder Treiber eine Exception verursachen während sich das Programm gerade in OnClose oder OnDeaktivate befindet.
Ja, das kann passieren, wobei das nicht auf die genannten Funktionen/Events beschränkt ist. Und "verursachen" ist der falsche Begriff, denn verursacht werden können Exceptions (AFAIK) nicht von externer Seite, nur ausgelöst durch irgendwelche Zustände, mit denen der eigene Code nicht klarkommt und dieser dann eine Exception auslöst.

Ich hatte nun schon mehrfach den Fall, dass sich irgendein anderes auf einem fremden Rechner laufendes Programm in die Exceptionhandler-Kette reinhing, so dass mein eigener nicht auslöste. Das führte dummerweise zum Absturz meiner Software, und ich konnte noch nicht einmal diagnostizieren, wer dafür verantwortlich ist/war und wie ich es beheben sollte. Sowas ist richtig Scheiße. Ändert aber nichts an der Wichtigkeit eigener Exceptionhandler.

Zitat:
5)Ich hab' noch nie eine Fehlermeldung vom OS bekommen die mir tatsächlich wirklich weitergeholfen hätte
Glaub mir: Du wirst diese (vermeintlich) nichtssagenden Dinger irgendwann zu schätzen wissen, denn nur damit kann man sich auf die Suche begeben, sei es nun im eigenen Code oder im Internet. Oft ist es so, dass andere Leute bereits etwas zu einer bestimmten Meldung geschrieben haben, wodurch sie ausgelöst werden kann, und - mit etwas Glück - wie man sie vermeiden bzw. beheben kann.

Zitat:
Der Einzige, der vielleicht ein klein Wenig mit "Fehler in Adresse Blabla.. Read BlaBla"
Ja, nun, mit dieser Art von Meldungen kann ich auch nichts anfangen. Deswegen ja: Exceptions beim Auftreten mit eigenen nützlichen Infos anreichern und erneut werfen; das kann auch den Funktionsname beinhalten, so dass man genau weiß, wo man suchen muss.

Oh, jetzt hab ich so viel dazu geschrieben, dass es wohl sinnvoll wäre, meinen Beitrag (und den beantworteten) in ein neues Thema zu verschieben. Könnte man "Exceptions, die Xte" nennen .

MfG Dalai
  Mit Zitat antworten Zitat