2009-06-01 6 views
3

Gibt es die gleiche Technik, die FastMM4 für Delphi bietet, Speicherverluste an eine detaillierte Datei zu melden, wenn die Anwendung als Dienst ausgeführt wird? Natürlich wäre es am besten, Komponententests und eine einfache eigenständige Anwendung zuerst zu schreiben und die Lecks dort außerhalb der Serviceumgebung zu finden.Wie kann ich das FastMM4-Speicherleck-Reporting in einem Service verwenden?

Edit: und es gibt http://blog.delphi-jedi.net/2008/05/07/debugging-services-an-easy-way/

Antwort

4

Wie Lars Truijens bemerkt, erfordert das Schreiben in eine Protokolldatei Dateisystemberechtigungen. Das standardmäßige lokale Systemkonto (d. H. Wenn Sie kein Konto explizit festlegen oder sich nicht in Ihrem Code anmelden) hat vollen Zugriff auf das lokale Dateisystem, hat jedoch keinen standardmäßigen Netzwerkzugriff.

FWIW - Normalerweise entwickle ich meine Dienste als normale Windows-Anwendungen, bis der Hauptteil der Logik läuft und stabil ist. Mit einer Bibliothek wie SvCom können Sie Ihre Dienste als normale Desktop-Anwendung oder als Dienst ohne Code-Änderungen ausführen.

+0

Ebenso - Ich habe zwei Versionen: der Service, und eine Standalone-Anwendung, die eine Form hat, die das Service-Modul startet und macht es als normal laufen. Ideal für Dinge wie Leckprüfung etc. – mj2008

+0

Vereinbart, ich werde immer eine Konsole oder GUI-Version der Anwendung, die in erster Linie zum Testen und zur Fehlersuche verwendet werden. –

2

Ja, das Konto zur Verfügung gestellt, um Ausführung des Service verwendet wird, hat genügend Rechte, um die Protokolldatei zu schreiben.

0

Ich habe die gleiche Herausforderung im Moment. Ich habe das versucht, aber es funktioniert nicht, zumindest soweit für mich. Es gibt ausreichende Rechte für das Konto, da der Dienst seine eigene proprietäre Protokolldatei schreiben kann. Ich habe FullDebugMode eingeschaltet und die DLL hinzugefügt, ich habe LogMemoryLeakDetailToFile, beide über die IDE-Optionen eingeschaltet. Im Code sehe ich, dass die richtigen Bereiche vom Compiler erkannt werden, wenn ich zum Beispiel einen Fehler provoziere, meldet der Compiler dies. Außerdem kann ich den FastMM-Code nicht debuggen. Wenn ich einen Haltepunkt setze, wird er ignoriert. Ich habe alle meine lokalen Festplatten durchsucht, auf denen dieser Bericht vielleicht gegangen ist, es wird nicht gefunden. Ich starte und stoppe den Dienst von 'Administration-Services', alles geht gut, es startet, aber kein Bericht. Wenn ich das gleiche mit einer normalen ausführbaren Datei mache, geht alles gut. Ich verwende FastMM478 und Delphi2007.

Marc

0

Ok fand ich einen anderen Grund, warum manchmal kann man keine Ausgabe, Logfile oder messagebox sehen ......

Wenn Sie keinen Fehler machen, sie schaffen keine Ausgabe .

So zu testen, ob FASTMM478 funktioniert absichtlich einen Fehler in Ihrem Programm wie machen:

// Erstellen und NICHT testToMakeError zu zerstören: = TStringList.Create; für I: = 0 bis 100 do testToMakeError.Add ('foobar');

Ich nahm an, ich hätte irgendwo einen Fehler gemacht und einen Tag damit verbracht herauszufinden, warum das Programm mir kein Feedback gegeben hat.

Marc