![]() |
Delphi-Version: 2010
Fehlermeldung korrekt ausgeben
Hallo,
habe folgenden Code und möchte eine Fehlermeldung ausgeben:
Delphi-Quellcode:
Im Debugger erscheinen die Debugger Exceptions. Starte ich die Exe erscheint zuerst mein ShowMessage "error" und später eine Zugriffsverletzung bei Adresse .. in Modul ..;var o : TObject; begin try try o.Create; except ShowMessage('error'); end; finally FreeAndNil(o); end; Wie bekomme ich die letzte Meldung weg? Da der Fehler bereits abgefangen wurde, möchte ich die Nachricht nicht anzeigen. |
AW: Fehlermeldung korrekt ausgeben
Die Zugriffsverletzung, die du beschreibst, kommt nicht vom ersten Fehler innerhalb des except-Blocks, sondern vom Freigeben des nicht erzeugten Objekts danach!
Erklärung: Die Statements im finally-Block werden immer ausgeführt, also auch dann, wenn dein create() fehlschlägt. Somit knallt es dann auch dort nochmal, weil dein "o"-Objekt an der Stelle nicht erzeugt wurde, du es aber freigeben willst. Also entweder so:
Delphi-Quellcode:
oder so:
var
o : TObject; begin try try o := TObject.Create; FreeAndNil(o); except ShowMessage('error'); end; end;
Delphi-Quellcode:
oder mit ausführlicher Fehlermeldung:var o : TObject; begin try try o := TObject.Create; except ShowMessage('error'); end; finally if assigned(o) then FreeAndNil(o); end;
Delphi-Quellcode:
var
o : TObject; begin try try o := TObject.Create; except on E : Exception do ShowMessage('Error ['+ E.ClassName+']: '+ E.Message); end; finally if assigned(o) then FreeAndNil(o); end; |
AW: Fehlermeldung korrekt ausgeben
Es muss
Delphi-Quellcode:
heissen.
o := TObject.Create;
Zudem wird beim Fehler im Konstruktor kein Objekt erzeugt, so brauchst du dieses dann auch nicht mehr Freigeben Bei lokalen Variablen würde dann auch .Free reichen |
AW: Fehlermeldung korrekt ausgeben
Eine Assigned-Abfrage vor einem Free(AndNil) ist BTW überflüssig, da Free intern selbst auf Assigned prüft.
|
AW: Fehlermeldung korrekt ausgeben
Danke. Dann war meine todsichere Methode für einen "künstlichen" Fehler mit o.create falsch.
|
AW: Fehlermeldung korrekt ausgeben
Wieso nicht einfach in der Form?!
Delphi-Quellcode:
begin
try // Erzeugen try // Das tun, was man tun will finally // Freigeben end; except // Fehler behandeln end; end; |
AW: Fehlermeldung korrekt ausgeben
Zitat:
Ressourcenschutzblock:
Delphi-Quellcode:
Ressourcenschutzblock mit Exceptionbehandlung:
// Erzeugen
try // Das tun, was man tun will finally // Freigeben end;
Delphi-Quellcode:
Ressourcenschutzblock mit Exceptionbehandlung und, im Except, mit möglichem Zugriff auf das Objekt:
try
// Erzeugen try // Das tun, was man tun will finally // Freigeben end; except // Fehler behandeln end;
Delphi-Quellcode:
// Erzeugen
try try // Das tun, was man tun will except // Fehler behandeln end; finally // Freigeben end; |
AW: Fehlermeldung korrekt ausgeben
Zitat:
Delphi-Quellcode:
raise Exception.Create('Uhhh, Fehler!');
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz