Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: onClose-Funktion auch bei Absturz ausgeführt?

  Alt 4. Nov 2008, 10:39
Zitat von nahpets:
Hallo,

bei einem Programmabsturz kannst Du grundsätzlich nicht davon ausgehen, irgendeine Information über den Absturz zu erhalten. Mit ein bisserl Glück erfährst Du eventuell noch etwas, aber darauf verlassen kannst Du Dich nicht.

Vor einiger Zeit hatte ich ein Programm, das ab und an vollkommen unnachvollziehbar herumzickte.
Bin dann, nachdem ich nicht mehr weiterwußte, hergegangen und habe am Anfang und am Ende jeder Funktion/Prozedure den Aufruf einer eigenen Loggingroutine eingebaut. Die bekommt als Parameter einen String mitgegeben und schreibt diesen zusammen mit 'nem Zeitstempel in eine Datei.
Am Anfang der Funktionen/Prozeduren wird einfach nur "Beginn Funktion-/Prozedurname" und am Ende "Ende Funktion-/Prozedurname" geschrieben.
In die eigenen Try-Except-Blöcke habe ich den Aufruf ebenfalls hineingeschrieben und dort wird neben dem Zeitstempel auch noch die von der Exception ausgegebene Fehlermeldung in die Datei geschrieben.

Hier ist dann Phantasie gefragt, es lassen sich die Inhalte der Aufrufparameter zu den Funktionen/Prozeduren protokollieren, irgendwelche Zustände von Komponenten, Inhalte von Eingabefeldern..., alles das, was bei der Fehlersuche hilfreich sein könnte.

Damit das Ganze nicht zuviel Logdatei ergibt, habe ich über eine Ini-Datei einen Schalter gesetzt, mit dem ich das Logging ein- und ausgeschalten kann. Man könnte auch noch einen Logginglevel einbauen, mit dem über einen Eintrag in der Ini-Datei gesteuert werden kann, wieviel protokolliert wird, indem man der Loggingroutine noch diesen Parameter übergibt und damit steuert, ob eine Ausgabe erfolgt oder nicht. So könnte man für Beginn und Ende einen anderen Level nehmen, als für Ausnahmen.

Lange Rede kurzer Sinn: Durch diese Verfahrensweise habe ich herausbekommen, dass das Programm immer dann anfing zu zicken, wenn auf einem Datenbankserver an einem anderen Standort Abends um 21.30 ein bestimmter Job startete und dadurch die Datenbankverbindung zu diesem Server "irgendwie" beeinträchtigt wurde. Hiermit kam eine Routine nicht zurecht und hat dann irgendwann für ein riesiges Speicherloch gesorgt, bis zum Spürbarwerden des Problemes konnten jedoch Stunden oder Tage vergehen.

Hoffe, Dir damit ein bisserl Anregung, zur hoffentlich erfolgreichen Fehlersuche, geben zu können.
Hallo nahpets,

genau so hatte ich mir das gedacht, wobei ich bisher immer nur die Aktionen des Bedieners überwachen wollte. Dabei ist deine Idee einfach den Beginn und das Ende einer jeden Funktion natürlich wesentlich besser. Es geht mir nämlich auch einfach nur darum, Fehlersuche im Betrieb des Programmes einfacher und schneller zu finden. Bei einem anderen Projekt hier habe ich nämlich gesehen, dass dies sehr sinnvoll ist, da dort das Programm immer unterschiedlich abstürzt. Leider wurde aus kostengründen der Entwickler vor der inbetriebnahme entlassen und somit ist kein effektives Troubleshouting möglich gewesen. Also danke für die anregung, werde mir deinem Beispiel zu folge auch die Anfänge und Enden der Proceduren protokollieren lassen.
Jetzt ist aber nur noch eine Frage offen, wenn das Programm keinen Fehler hat, soll diese Tmp-Datei wieder gelöscht werden, da sie keine relevanten Daten für mich enthält, kann man dies in der Onclose machen oder wird diese Funktion doch ab und zu trotz exception ausgeführt, dann wäre es nämlich schlecht, wenn trotz Exceptions auch die Tmp-Datei gelöscht wird.
  Mit Zitat antworten Zitat