Entwickler-Ecke

Sonstiges (Delphi) - Frage zu Try..except


Henry - So 24.11.02 20:32
Titel: Frage zu Try..except
Hallo,

ich habe da mal eine Frage zu Try...Except.

Ich habe in meinem Programm begonnen spezielle Anweisungsblöcke bei denen Fehler auftauchen könnten mit einer Try...Except Anweisung eingebettet. Das sieht dann sinngemäß bei jeder eingebetteten Anweisung so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Try
 Meine Anweisungsblock
 ..
 ..
 ..
Except
 ShowMessage('Fehler 0001');
End; //Except

Nun tauchte bei einem Anweisungsblock ein Fehler auf, bei dem sich der Rechner Aufhängte (Blue Screen). Nachdem ich diesen Block in Try..Except eingebettet habe wurde mir auch meine Message mit der Fehlermeldung angezeigt. Als ich dan die Message mit OK zur kenntnis nahm Stürtzte der Rechner Trotzdem ab.

Wie kann ich es so Regeln, das der Fehler abgefangen wird (meine Message wird gezeigt) und nachdem ich OK gedrücht habe einfach mit der nächsten Anweisung nach dem Problematischen Block weitergemacht wird?

Ich dachte eigentlich das Try..except dazu gedacht wäre.

Kann mitr da jemand einen Tip geben?

Danke im Voraus


Anonymous - So 24.11.02 21:05

Dazu ist es eigentlich auch da. Nur fängt Try/Except Fehler ab auf die es reagieren kann. Wenn dein Programm auf fremden Speicherbereich zugegriffen und den zerstört hat, dann kriegt das auch Try/Except nicht wieder hin. Würde ich so sagen, oder?


Henry - So 24.11.02 21:10

Also möchtest Du mir damit sagen, das in meinem Programm ein Fehler aufgetreten ist, den man nicht umgehen kann?


Anonymous - So 24.11.02 21:53

Kann ich dir nicht sagen. Ich kenn dein Code nicht. Allerdings ist ein Bluescreen schon eine Kategorie für sich. Von einem DivByZero kriegst du kein Bluescreen.

Was ich sagen will ist, daß du irgendwo kräftig in das System eingreifst. Ich hab zwar schon hier und da auch eine Fehlermeldung bei meinem Programm gehabt, aber noch nie ein Bluescreen.


Henry - So 24.11.02 22:00

Eigentlich würde ich nicht sagen, das ich mit meinem Programm Tief ins System eingreife.
Der Code wo der Fehler auftritt sieht so aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Try
   Form3.LEDMeter1.Position := StrToInt(Edit1.Text); //Windrichtung
   Form3.LEDMeter2.Position := StrToInt(Edit2.Text); //Luftfeuchte
   Form3.LEDMeter3.Position := StrToInt(Edit3.Text); //Temperatur
   Form3.LEDMeter4.Position := StrToInt(Edit4.Text); //Luftdruck
   Form3.LEDMeter5.Position := StrToIn(Edit5.Text); //Windgeschwindigkeit
   Form4.Button1.Click;
   Form5.Button1.Click;
 Except
  ShowMessage('Fehler bei Bargraph');
 End; //except


Also ich schiebe nur eun paar zahlen durch die gegend :)
Wenn ich diesen Teil des Codes Auskommentiere ist der Fehler weg.


hansa - So 24.11.02 22:02

Hi,

handelt s sich um Win98 :?:

Gruß
Hansa


Henry - So 24.11.02 22:03

ja!


Christian S. - So 24.11.02 22:04

Was wird denn bei den Button-Clicks gemacht?


Henry - So 24.11.02 22:08

Eigentlich nur ein paar linien auf einem Image gezeichnet.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 Image1.Canvas.MoveTo(x1,y1);
  DWert                     :=  StrToInt(Form1.Edit2.Text);
  x1                        := DWert ;
  y1                        := y1 + 4;
  Image1.Canvas.Pen.Color   := CLblack;
  Image1.Canvas.LineTo(x1,y1);
  Inc(Zaehler,1);
  Label2.Caption            := 'Messung: ' + IntToStr(Zaehler);
  Maxdatensaetze            := 400 div 4;
  If Zaehler = Maxdatensaetze + 1 then
   Begin
    Zaehler := 0;
    Y1 := 0;
    y2 := 4;
    Image1.Picture.LoadFromFile(Verzeichnis);
    Feuchteverlauf.Grenzen;


Das hier unten erzeugt auch nur drei Linien

Quelltext
1:
Feuchteverlauf.Grenzen;                    


wulfskin - So 24.11.02 22:20

Hallo Henry!

Damit wir die helfen können, müssen wir wissen, wo der Fehler genau auftritt! Deshalb setze mal am Anfang der Prozedur einen Haltepunkt und führe danach die einzelnen Anweisungen des Programmes mit F8 einzeln aus. Danach kannst du uns genau sagen, wo der Fehler auftritt!

Gruß wulfskin!


Henry - So 24.11.02 22:29

Da ich hauptsächlich auf meinem XP - System Progge, muß ich ich das morgen mal auf dem 98 System probieren.
Auf xp hatte ich bis jetzt keine Probleme mit dem Programm. Es lief darauf aber auch noch nicht so lange.

Übrigens: Das Programm läuft auch erst eine weile und dann taucht der Fehler auf.

Ich werde das Morgen mal probieren.

Herzlichen Dank für eure Hilfe, vieleicht habe ich den Fehler dank diesem Tip dann schon selber gefunden.
Ich werde es dann hier mittteilen oder die Position des Fehlers Posten.

Gute Nacht erstmal :D


Anonymous - Mo 25.11.02 00:09


Quelltext
1:
Form3.LEDMeter1.Position...                    


Kann sein, daß das eine Fremdkomponente ist? Es kann sein, daß der Fehler da passiert. In diesem Fall wird die Fehlermeldung nicht in der Kompo angezeigt, sondern erst in der Prozedur in der das aufgerufen wurde.

In diesem Fall ist die Kompo schuld.


Henry - Mo 25.11.02 19:05

Ja, ist ne Fremdkompo.

Ich habe es versucht in der Delphi IDE laufen zu lassen um den Fehler angezeigt zu bekommen. Allerdings lief das Programm dies mal mehrere Stunden ohne das der Fehler auftrat. Komisch,komisch.

Da ich an der Stelle so oder so was umstrukturieren wollte werde ich den Part einfach weglassen und was besseres dort verwenden. Denn ich mag sporadisch auftretede Fehler, die man sich nicht erklären kann, überhaupt nicht und möchte so ein Programm nicht Weitergeben. Wie gesagt, ich wollte diese Stelle sowieso ändern.

Ich kann leider keine präzieseren Angaben zum Fehler machen wenn er nicht mehr auftritt :(

Danke für eure Hilfe.