Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Try Except - Originale Delphi Fehlermeldung? (https://www.delphipraxis.net/135393-try-except-originale-delphi-fehlermeldung.html)

Magnus 10. Jun 2009 07:37


Try Except - Originale Delphi Fehlermeldung?
 
Hallo,

wie kann ich bei einer Try-Except Anweisung den Text der originalen Delphi Fehlermeldung abfangen?

Delphi-Quellcode:
TRY
 { irgendwelcher fehlerverursachender Code }
EXCEPT
 showmessage('Huch, ein Fehler');
END;
Die Fehlermeldung möchte ich um den originalen Fehlertext von Delphi erweitern, da ich nur dann weiß, was eigentlich passiert ist. Denn wenn ich den Code einfach ohne TRY laufen würde, würde Delphi ja eine schöne detaillierte Information ausgeben.

jaenicke 10. Jun 2009 07:45

Re: Try Except - Originale Delphi Fehlermeldung?
 
Delphi-Quellcode:
try

except
  on E: Exception do
    ShowMessage(E.Message);
end;

Magnus 10. Jun 2009 08:04

Re: Try Except - Originale Delphi Fehlermeldung?
 
Vielen Dank, hat geholfen :)

himitsu 10. Jun 2009 09:40

Re: Try Except - Originale Delphi Fehlermeldung?
 
ansonsten sind in der System-Unit noch einige Variablen definiert :angel:
z.B. das ExceptObject
Delphi-Quellcode:
try

except
  ShowMessage(Exception(ExceptObject).Message);
end;

jaenicke 10. Jun 2009 09:44

Re: Try Except - Originale Delphi Fehlermeldung?
 
Ah, das kannte ich gar nicht. *unter Gehirn\Delphi abspeichert* :mrgreen:

Funktioniert das eigentlich auch in finally, wenn da eine Exception aufgetreten ist? :-D

Muetze1 10. Jun 2009 10:19

Re: Try Except - Originale Delphi Fehlermeldung?
 
1. Das ExceptObject ist global und sollte nicht verwendet werden, da es bis zur Anzeige/Ausführung eures Codes unter des ExceptObject'es schon wieder eine neue Exception - u.a. in einem parallelen Thread - zu einer weiteren Exception gekommen sein kann und dann enthält ExceptObject dieses. Die globale Variable kann man nicht sicher einsetzen.
2. Das On E:Exception do gibt euch die zu dem Handler passende Exception und legt diese in E ab. Hier könnt ihr euch sicher sein, dass ihr die richtige verwendet.
3. Falls nun einer kommt: ich nutze keine Threads: Die VCL hat für ihre Nachrichtenschleife schon einen Thread (in dessen Context soweit zwar alle GUI Events laufen, aber das ist nur einer von vielen) und genauso gut gibt es an vielen anderen Stelle noch weitere. U.a. seien auch nochmal die Sockets erwähnt die davon nicht gerade wenige haben.
4. Finally Ausführung bedeutet nicht, dass es auch eine Exception gegeben hat! Und das man dies auch nicht anhand des ExceptObject'es nachprüfen kann, kann man sich aufgrund der Hinweise aus 1. denken.

Vergesst ExceptObject lieber schnell wieder! Es ist nur mit Vorsicht und unter bestimmten Bedingungen nutzbar. Auch die RTL nutzt diese Variable zum mappen von Exception, u.a. von Windows bzw. der WinAPI.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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