2009-04-17 4 views
5

Ich habe einen Windows-Dienst mit einem Timer. Es ist sehr schwer, es zu debuggen. Weil ich den Dienst starte und Breakpoints in verschiedenen Teilen des Codes hinterlasse. Wenn ich den Prozess anschließe, erwarte ich, dass der Dienst von Anfang an beginnt, statt eines zufälligen Platzes im mittleren Code, wo ich Haltepunkte habe. Es ist schwer zu debuggen wie eine normale Anwendung, wo Sie den Ausgangspunkt kennen. Es scheint, dass es Prozesse im Hintergrund gibt, die noch nicht abgeschlossen sind. Also beginne ich jedes Mal mit dem Debuggen, anstatt vom ersten Unterbrechungspunkt an zu beginnen, beginnend mit einem zufälligen Unterbrechungspunkt in der Mitte der Anwendung.Wie Debuggen eines Windows-Dienstes mithilfe von Haltepunkten?

Ich möchte wissen, wie Windows-Dienst in Bezug auf Prozesse, Threads usw. funktioniert und wie kann ich von Anfang an Debugging starten?

+0

Meine wirkliche Herausforderung ist es, den Service von herum springen zu stoppen? Gibt es Threads, die ich nicht kenne? –

Antwort

0

Simplest Ansatz ...

Setzen Sie das Geschäft - funktionale Teile des Service-Code in einer separaten Klasse, in einer separaten Bibliothek Montage ... Dann können Sie es debuggen unabhängig voneinander eine einfache Konsolenanwendung mit ...

+0

Dies ist eine Produktionsanwendung und ich kann den Quellcode im Moment nicht ändern. –

9

Ich nehme an, Sie sprechen über .Net natürlich. Ich habe immer den folgenden Code verwendet, um meine Dienste zu debuggen. Ich lege es dort hin, wo ich den Debugger starten möchte. Starten Sie den Dienst, und Visual Studio wird automatisch gestartet. Funktioniert gut für mich.

System.Diagnostics.Debugger.Launch();

System.Diagnostics.Debugger.Debug();

+0

Danke für die Rückmeldung. Ja, ich spreche über .net und ich google Ihre Instruktionsmenge, um zu sehen, wie das funktionieren würde. –

+0

Sie können diesen Code für das Debuggen verwenden. Aber vergiss nicht, es später zu entfernen, wenn du fertig bist. Sie müssten den Dienst natürlich neu kompilieren, nachdem Sie Änderungen vorgenommen haben. –

+0

Ich benutze immer System.Diagnostics.Debugger.Debug() ;, ich legte einen booleschen Schlüssel in die Konfigurationsdatei "IsDebugging". Also schalte ich den Debugger jederzeit ein oder aus – Costa

2

einfach F5 drücken. Sie können Windows Services regelmäßig wie Apps ausführen.

Da wir keine anderen Befehlszeilenargumente haben, verwenden wir einfach das Vorhandensein von beliebigen Kommandozeilenargument als ein Signal, um als eine normale Windows-App zu laufen. Sie könnten auch das Vorhandensein eines bestimmten Befehlszeilenarguments (d. H./Debug) erfordern.

0

Es ist nicht so praktisch wie Breakpoints im Debugger, aber ich fand Schreiben Ausgabe auf eine einfache Protokolldateien hilft. Wir haben Dienste, die Threads zur Ausführung von Aufgaben erzeugen, und das Schreiben in eine Protokolldatei hat dabei geholfen, Probleme zu lokalisieren.

1

Sie können "Image File Execution Options" verwenden und konfigurieren, dass jedes Mal, wenn der Dienst gestartet wird, er in einem Debugger gestartet wird.
Dieser Debugger kann WinDBG oder Visual Studio sein.

Verwandte Themen