Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 26.12.07 11:11 
Ich stehe vor dem Problem, dass ein Programm von mir auf einem Rechner nicht starten will. Es bricht während des Startvorgangs mit einer AV ab. Auf den Rechner habe ich keinen Zugriff, und Delphi gibts da auch nicht. Da der Startvorgang recht umfangreich ist, möchte ich eine Version des Programms schreiben, die sämtliche Aktionen in ein Logfile schreibt. Nach dem letzten Eintrag muss dann ja irgendwo der Haken sein.
Die Frage ist, wie mach ich das prinzipiell am besten? Am sinnvollsten erscheint mir, das über einen Compilerschalter zu machen, damit der Code in der richtigen Version des Programmes gar nicht drin ist. Oder ist eine Steuerung über einen Startparameter sinnvoller? Da würden mich nur erstmal die ständigen Abfragen stören, die dann ja immer durchgeführt werden, auch wenn das Programm stabil läuft.
Der Nachteil einer gesonderten Version wäre doppeltes Compilieren und verteilen der Datei, d.h. man kann dem Nutzer nicht sagen "Führ mal diese bat-Datei aus", sondern muss ihm ein neues Programm schicken...

Was meint ihr?

_________________
We are, we were and will not be.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 26.12.07 11:18 
Ich hatte auch mal das Problem. Allerdings bei einer dll. Ich habe mir dann einfach eine procedure AddLog(const S:String); geschrieben, mit der ich den Log fülle. Dazu hab ich einfach eine neue dll mit dem alten quellcode erstellt. Dann habe ich mir im Hauptprogramm ein Admin-Panel gemacht (ist bei mir in allen Programmen drin, man muss nur den ini-Schalter kennen :wink: ), auf das ich Buttons mit verschiedenen Funktionen gelegt habe. Ich weiß nicht, ob es da andere Möglichkeiten gibt, aber ich würde diese Methode wieder verwenden, da man alles ganz genau protokollieren kann.

Edit: Rechtschreibung...
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 26.12.07 11:37 
Mir geht es halt einfach darum, wie man diese Log-Funktion generell in den Code einbaut, und dabei den "Normalbetrieb" des Programms nicht oder so gut wie nicht stört. Ich hab sowas noch nicht wirklich gemacht, erst recht nicht bei größeren Programmen, die schon im Umlauf sind und damit (zumindest teilweise) nachträglich ausgestattet werden sollen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
// Mit Compiler Schalter
for i := 0 to Ganzviel do
begin
  {$IFDEF Use_Log}Log('machwas');{$ENDIF} 
  machwas;
  {$IFDEF Use_Log}Log('machnochwas');{$ENDIF} 
  machnochwas;
  //...
end;

// Per Parameter/ini-Schalter/...
for i := 0 to Ganzviel do
begin
  if Use_Log then Log('machwas');
  machwas;
  if Use_Log Log('machnochwas');
  machnochwas;
  //...
end;

//...


Problem bei mir ist auch, dass der Fehler sehr früh auftritt, noch vor oder zumindest während MainForm.Create.

_________________
We are, we were and will not be.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 26.12.07 13:03 
Wir haben das so gelöst:

Wir haben Debugausgaben in der SW (ach was). Diese werden über eine einzige Routine gebündelt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Procedure AddLog (Const aModule, aProcedure, aMessage : String);
Begin
  If not InDebugMode Then Exit;
  ....
End;

Initialization
  InDebugMode := FileExists (ExtractFilePath(ParamStr(0))+'Debug.TXT');
End.

Der Trick ist nun der, das wir über die Existenz der Datei 'Debug.TXT' steuern, ob Debugausgaben erfolgen sollen, oder nicht. Wenn der Anwender nach einem Jahr auf ein reproduzierbares Problem stößt, weisen wir ihn an, diese Datei zu erstellen und das Programm neu zu starten.

Die Steuerdatei könnte auch in jedem anderen Ordner stehen, oder es kann sich um einen Registryeintrag handeln o.ä. Wir haben nur versucht, es dem DAO so einfach wie möglich zu machen.

Klar blähen die Debugausgaben die Anwendung auf, aber lieber so, als dem Kunden eine neue EXE zu schicken.

Nebenbei: Fujitsu-Siemens-PC aus den Jahren 2004-2007 haben eine Macke in der Grafikkarte, die dazu führt, das einige Delphi-Anwendungen beim Start abkacken. Es gibt so ein DirectX-Testtool von Windows, Man erkennt diese Idioten-PC, das die Buttons eingegraut sind.

_________________
Na denn, dann. Bis dann, denn.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.12.07 13:14 
Wenn Du weißt, dass eine Exception-Adresse innerhalb deines Programmes geliefert wird, dann könnte auch OmMAP hilfreich sein. Der Kunde bekommt dann ganz normal die Version ohne Debug-Infos, Du behälst aber eine Kopie der MAP-File der herausgegebenen Version. Im Fehlerfalle kannst Du dann mit OmMAP und der Exception-Adresse die Fehlerstelle etwas eingrenzen.

Wenn ferner der Fehlerberichterstattungsdienst von XP läuft, lass Dir die vollen Details von dort geben. Aus dem dort enthaltenen Stack Dump lässt sich ein Teil des Callstacks rekonstruieren.

Es hat bereits Moderatoren gegeben, die damit Fehler gefunden haben, die RICHTIG selten nur auftraten. ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Mi 26.12.07 13:41 
user profile iconBenBE hat folgendes geschrieben:
Es hat bereits Moderatoren gegeben, die damit Fehler gefunden haben, die RICHTIG selten nur auftraten. ;-)

Ist das etwas besonderes das es Moderatoren waren? :gruebel:

_________________
Ein Nutzer der Ecke ;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.12.07 15:16 
user profile iconMartin1966 hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Es hat bereits Moderatoren gegeben, die damit Fehler gefunden haben, die RICHTIG selten nur auftraten. ;-)

Ist das etwas besonderes das es Moderatoren waren? :gruebel:

Aus dem Kreise der User habe ich bisher noch kein Feedback erhalten, was mich selber etwas enttäuscht...
Du bist also aufgerufen, gern OmMAP mal auszuprobieren und Feedback zu geben, dann änder ich auch die Aussage ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.