AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sämtliche Fehlermeldungen abfangen

Ein Thema von Nicolai1234 · begonnen am 28. Jul 2005 · letzter Beitrag vom 29. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#1

Sämtliche Fehlermeldungen abfangen

  Alt 28. Jul 2005, 19:56
Hallo,
ich habe ein Programm geschrieben, das Timer benutzt, FTP-Komponenten, HTTP-Komponenten und vieles mehr.
Problem ist, dass das Programm nicht abstürzen darf! Bei der Anzahl der Komponenten etc. kommt dies aber ab und zu mal vor. (Verbindungsprobleme usw...)
Daher meine Frage. Wie kann ich alle Fehlermeldungen abfangen?
Mir ist egal in welcher Form. Von mir aus kann sich das Programm auch beenden und danach neu starten oder so.
Welche Mögichkeiten gibt es da?

Vielen Dank im voraus
Nicolai
  Mit Zitat antworten Zitat
Mr Whoopee

Registriert seit: 28. Jun 2004
73 Beiträge
 
#2

Re: Sämtliche Fehlermeldungen abfangen

  Alt 28. Jul 2005, 20:17
In erster Linie würde ich mit try und except arbeiten. Ich denke, dass das reicht.
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#3

Re: Sämtliche Fehlermeldungen abfangen

  Alt 28. Jul 2005, 21:04
Oder nutze Application.OnException, damit kann man alle nicht behandelten Exceptions abfangen.
  Mit Zitat antworten Zitat
Benutzerbild von Chegga
Chegga

Registriert seit: 5. Nov 2004
Ort: Kirchheim
453 Beiträge
 
Delphi 7 Architect
 
#4

Re: Sämtliche Fehlermeldungen abfangen

  Alt 28. Jul 2005, 22:28
Hi,

MfG Marc
Marc P.
Grüße aus Kirchheim Teck
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Sämtliche Fehlermeldungen abfangen

  Alt 29. Jul 2005, 00:32
Ja, try und except ist schon klar...
Ich dachte nur, es gäbe einen allgemeineren Weg. (ich kann ja schlecht das gesamte Programm in ein TRY rein packen.)
Naja, dann werde ich versuchen müssen alle Anweisungen einzuschachteln... Trotzdem Danke

Ist es eigentlich sinnvoll, - mehr oder weniger - alle Functionen/Proceduren in Try-Except einzuschachteln?
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Sämtliche Fehlermeldungen abfangen

  Alt 29. Jul 2005, 00:34
Zitat von Nicolai1605:
Ist es eigentlich sinnvoll, - mehr oder weniger - alle Functionen/Proceduren in Try-Except einzuschachteln?
Ich finde es allg. überhaupt nicht sinnvoll, einfach Fehler abzufangen, damit man so auch nie weiß, was die Ursache der Fehler war.
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Sämtliche Fehlermeldungen abfangen

  Alt 29. Jul 2005, 00:38
Naja, bei meine FTP-Komponente (Indy) zum Beispiel kommen manchmal (eher selten) Fehler, wenn man etwas hochladen möchte. Dann starte ich das Programm neu logge mich erneut ein und das ganze geht einwandfrei (alles mit der selben Config etc.)
Sowas kann ich leider nicht anders bekämpfen...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Sämtliche Fehlermeldungen abfangen

  Alt 29. Jul 2005, 00:39
Zitat von Nicolai1605:
Ist es eigentlich sinnvoll, - mehr oder weniger - alle Functionen/Proceduren in Try-Except einzuschachteln?
Aus meinen Exception Tutorial:
Zitat:
Dass die strukturierte Ausnahmebehandlung funktioniert ist weniger eine Aufgabe des Betriebssystems,
sondern eigentlich des Compilers. Der Compiler muss am Anfang und am Ende von Ausnahmeblöcken
speziellen Code erzeugen. Außerdem muss der Compiler zum Ausführen Tabellen mit unterstützenden
Datenstrukturen anlegen und Callback Funktionen bereitstellen, die das Betriebssystem aufrufen kann, damit
es die Ausnahmeblöcke durchlaufen kann. Desweiteren ist der Compiler auch dafür zuständig den
Stackframe vorzubereiten und für sonstige zusätzliche Informationen.
Und:
Zitat:
Sinnvoller Einsatz von Exceptions
Generell teilt man den Programmfluss in drei Stufen ein: lowlevel Funktionen, highlevel Funktionen und GUI
Funktionen. Normalerweise rufen GUI Funktionen wie Events nur die komplexen highlevel Funktionen auf.
Lowlevel Funktionen sollten nun Exception frei sein. Die highlevel Funktionen sollten mit Exceptions arbeiten,
da deren Programmierung von aussagekräftigen Funktionsrückgabewerten viel zu kompliziert werden kann.
Exception erleichtern also in highlevel Funktionen deren Aufbau wesentlich.
Exceptions sollten niemals in Release-Funktionen benutzt werden. Der Grund ist ganz einfach: Solche
Funktionen werden meist gruppiert in übergeordneten Funktionen auftreten. Würde nun eine Exception
ausgelöst, würden die nachfolgenden Release-Funktionen ein Speicherleck verursachen. Würde man es
trotzdem machen, müsste der Programmierer nun jeden Aufruf solcher Release-Funktionen separat mit
einem try-finally schützen. Der Sinn und Zweck von Exception würde sinnlos werden.
Auf der anderen Seite ist es sinnvoll Exceptions in Allocator-Funktionen zu verwenden. Also in Funktionen in
denen Speicher angefordert wird. Tritt dort eine Exception auf, wird durch die Exception verhindert, dass
weiter sinnloser Speicher allokiert wird.

Try-except-Blöcke sollten immer mit Bedacht und sparsam eingesetzt werden. Ein vollständiges
"Abklemmen" aller Exceptions per try-except-Block ist fast immer schlecht aus Sicht der Wartung des
Programmes. Try-except-Blöcke sollten also gezielt nur auf einige Exception-Typen reagieren. Der Grund ist
offensichtlich. Das Ziel des Exception-Handlings sollte es sein für den Programmierer aussagekräftige
Ausnahmebedingungen für den Programmfluss zu visualisieren. Setzt man try-except-Blöcke unüberlegt ein,
so kann man dies Ziel nicht erreichen und der Vorteil von Exceptions geht verloren.
Generell gilt: Exceptions nur dann auslösen, wenn eine Bedingung eintrittunter der der Programmfluss
keinesfalls fortsetzbar ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: Sämtliche Fehlermeldungen abfangen

  Alt 29. Jul 2005, 11:24
Zitat von Nicolai1605:
(ich kann ja schlecht das gesamte Programm in ein TRY rein packen.)
Du darfst dreimal raten wieso Windows abkackt, wenn es dein Programm tut. Oder wieso du bei Delphi-Programmen eine bestimmte Fehlermeldung mit Angabe des Runtime Error und bei Konsolenprogrammen fast die gleiche Meldung bekommst. Gleiches gilt für so ziemlich alle Frameworks die ich kenne.

@Luckie: Ich kann dir nicht zustimmen. Wenn du mal daran denkst, wo Exceptions überall schon vom System her eingesetzt werden, sollte dich das nachdenklich machen (übrigens setze ich gleiche Methode in einem meiner C++-Programme ein um ein Objekt erst dann zu erzeugen, wenn auch ein Zugriff darauf stattfindet - ansonsten gibt's das Objekt nicht - ist durchaus sehr sparsam).
Die Stackgröße wird immer wieder angepaßt, wenn eine Exception wegen Overflow auftritt. Voila ... nächstes Anwendungsgebiet. Also Exceptions sind schon eine feine Sache. Klar sollte man sie im Übermaß nicht einsetzen ... aber wozu auch. Exceptions sind ja gerade deswegen sinnvoll, weil sie die Filter auch durchlassen können, so daß sie auf den letzten Exception-Handler durchschlägt.

Nachtrag: Den ersten Absatz kannste fast komplett wegwerfen. Wenn du mal an den Trick denkst, den ich dir zusammen mit Motzi gezeigt hatte, wirst du feststellen, daß das Betriebssystem sowohl im K-Mode als auch im U-Mode eine Menge bei der Exceptionbehandlung zu tun hat. Ich sage nur: setzen der Debugregister. Nur weil du den entsprechenden K-Mode-Code nicht siehst, heißt es nicht er sei nicht da, zumal das setzen der DrX eine privilegierte Operation ist (würde im U-Mode also selber eine Exception auslösen).
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Sämtliche Fehlermeldungen abfangen

  Alt 29. Jul 2005, 11:28
Da ich damals selbst noch nicht so viel wußte, habe ich mich da mehr auf die Aussage von Hagen verlassen in diesem Thread: http://www.delphipraxis.net/internal...ct.php?t=26734 Da ich ihn eigentlich als kompetent ansehe, dachte ich das wäre so in Ordnung. Nun scheint es da ja doch noch andere Meinungen zu geben.

Btw, der erste Absatz ist mehr oder weniger eine Aussage vom Richter, wenn ich mich nicht irre.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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