AGB  ·  Datenschutz  ·  Impressum  







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

wie sicher ist diese procedure?

Ein Thema von tn249 · begonnen am 7. Nov 2004 · letzter Beitrag vom 9. Nov 2004
Antwort Antwort
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#1

wie sicher ist diese procedure?

  Alt 7. Nov 2004, 00:03
hi,

ich arbeit momentan an einem ( für meine verhältnisse ) größerem projekt und hab darin auch die ansätze eines eigenen debugsystems verankert

ein teil davon ist die folgende procedure;
Delphi-Quellcode:
procedure Log(Text: string);
var
  LogFile: TextFile;
  TDTempStr: string;
begin
  DateTimeToString(TDTempStr, 'dd.mm.yyyy hh:nn:ss', Now());
  TDTempStr := TDTempStr + ': ' + Text;
  AssignFile(LogFile, 'Data/Log.txt');
  Append(LogFile);
  Writeln(LogFile, TDTempStr);
  Flush(LogFile);
  CloseFile(LogFile);
end;
die procedure soll einfach nur markante erledigte aufgaben dokumentieren, mit timestamp


ich habe gesehen das viele von euch mit try..expect / finally arbeiten und würde gerne wissen wann ihr das macht um welche fehler genau abzufangen und wie ihr die obere procedure ändern würdet?

Vielen Dank im voraus
MfG
tn_der_pate
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: wie sicher ist diese procedure?

  Alt 7. Nov 2004, 01:04
Hallo,

knallen wirds in 2 Fällen:
1) Deine Logfile existiert noch nicht, dann klappt Append nicht
2) Deine Logfile ist Read-only

Ich würd also noch nach Existenz der Logfile prüfen, und gegebenfalls Append rsp. Rewrite nutzen.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: wie sicher ist diese procedure?

  Alt 7. Nov 2004, 07:31
Hai,

ich würde, so wie Jelly es vorgeschlagen hat, prüfen ob die Logdatei vorhanden ist.
Ausserdem solltest Du in jedem Fall mit try-except Blöcken arbeiten. Da es ja für dein "Debugsystem" ist musst Du dafür sorgen das die Funktion auf keinen Fall selber einen Fehlerverursacht der dein Programm zum Absturz bring
Das hier wäre eine möglichkeit. Wenn Du den except-Teil noch verfeinerst kannst Du in deinem Programm noch auswerten warum der Aufruf der Funktion fehlgeschlagen ist.

Delphi-Quellcode:
function Log(Text: string) : Integer;
const
  filename = 'Data/Log.txt';

var
  LogFile: TextFile;
  TDTempStr: string;
  errorlevel : Integer;

begin
  errorlevel := 0; // Keine Fehler
  try
    DateTimeToString(TDTempStr, 'dd.mm.yyyy hh:nn:ss', Now());
    TDTempStr := TDTempStr + ': ' + Text;
    AssignFile(LogFile, filename);
    if not (FileExists(filename)) then
    begin
      Rewrite(logfile);
    end
    else
    begin
      Append(LogFile);
    end;
    Writeln(LogFile, TDTempStr);
    Flush(LogFile);
    CloseFile(LogFile);
  except
    errorlevel := 1; // Fehler
  end;
  result := errorlevel;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: wie sicher ist diese procedure?

  Alt 7. Nov 2004, 08:03
Hallo
Zitat von tn249:
... ich habe gesehen das viele von euch mit try..expect / finally arbeiten und würde gerne wissen wann ihr das macht um welche fehler genau abzufangen...
Grundsätzlich immer wenn das Programm Speicher anfordert o. Objekte erzeugt werden.
Beispiel
Delphi-Quellcode:
var
  Liste : TStringList;
begin
  Liste:=TStringList.Create;
  Try
    ...
    Liste.LoadFromFile(...); // Hier kann immer etwas schief gehen
    ...
  Finally
    Liste.Free
    end;
end;
Try Finally/Except ist auch immer angesagt, wenn das Programm auf irgendetwas externes zugreift.
Z.B. Schnittstellen, Festplatte, COM/DCOM, LAN usw. Denn diese Dinge liegen außerhalb Deines
Machtbereiches. D.h. da kann alles passieren.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#5

Re: wie sicher ist diese procedure?

  Alt 7. Nov 2004, 08:06
Bei mir läuft Folgendes. ^^

Ich hab da allerdings noch 'ne Log-Anzeige mitlaufen ...

Delphi-Quellcode:
  Procedure TForm1.Log_Add(S: String);
    Const Dateiname = 'Verwaltung-Log.txt';

    Var D: TextFile;

    Begin
      AssignFile(D, Dateiname);
      {$I-}
      Append(D);
      If IOResult <> 0 Then Rewrite(D);
      If IOResult <> 0 Then
        If FileExists(Dateiname) Then Begin
          FileSetAttr(Dateiname, FileGetAttr(Dateiname) and not (faReadOnly or faHidden or faSysFile));
          Append(D);
        End Else Rewrite(D);
      {$I-}
      If S = 'Then WriteLn(D, '') Else WriteLn(D, DateTimeToStr(Now, FormatSettingsLang) + ' ' + S);
      Flush(D);
      CloseFile(D);
      Memo094.Lines.BeginUpdate;
      While Memo094.Lines.Count > 17 do Memo094.Lines.Delete(0);
      Memo094.Lines.Add(TimeToStr(Now) + ' ' + S);
      Memo094.Lines.EndUpdate;
      Application.ProcessMessages;
    End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#6

Re: wie sicher ist diese procedure?

  Alt 7. Nov 2004, 12:32
Vielen dank schonmal für die antworten

könnt ihr mir noch erklären wann man try finally und wann try except hernimmt?

MfG
tn_der_pate
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: wie sicher ist diese procedure?

  Alt 7. Nov 2004, 12:39
Hallo, manchmal hilft es wenn man die Delphihilfe liest.

Text unten ist direkt von dort kopiert.




In einer try...except-Anweisung werden zuerst die Programmzeilen in Anweisungsliste ausgeführt. Werden dabei keine Exceptions ausgelöst, wird ExceptionBlock ignoriert und die Steuerung an den nächsten Programmteil übergeben.


In manchen Situationen muss sichergestellt sein, dass bestimmte Operationen auch bei Auftreten einer Exception vollständig abgeschlossen werden. Wenn beispielsweise in einer Routine eine Ressource zugewiesen wird, ist es sehr wichtig, dass sie unabhängig von der Beendigung der Routine wieder freigegeben wird. In diesen Fällen können try...finally-Anweisungen verwendet werden.
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#8

Re: wie sicher ist diese procedure?

  Alt 9. Nov 2004, 22:00
danke nochmal

MfG
tn
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:07 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