Entwickler-Ecke
Sonstiges (Delphi) - Debug-Version eines Programmes
Gausi - Mi 26.12.07 11:11
Titel: Debug-Version eines Programmes
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?
Regan - 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 - 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.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| for i := 0 to Ganzviel do begin {$IFDEF Use_Log}Log('machwas');{$ENDIF} machwas; {$IFDEF Use_Log}Log('machnochwas');{$ENDIF} machnochwas; end;
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.
alzaimar - 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:
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.
BenBE - 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. ;-)
Martin1966 - Mi 26.12.07 13:41
BenBE 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:
BenBE - Mi 26.12.07 15:16
Martin1966 hat folgendes geschrieben: |
BenBE 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 ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!