Fehlerbehebung (Debugging) bei Windows-Diensten

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 824344 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
824344 How to debug Windows services
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser schrittweise aufgebaute Artikel beschreibt, wie Sie einen Windows-Dienst mit dem WinDbg-Debugger (WinDbg.exe) debuggen. Zum Debuggen eines Windows-Dienstes können Sie den WinDbg-Debugger nach dem Starten des Dienstes an den Prozess anhängen, in dem der Dienst ausgeführt wird, oder Sie können den Dienst darauf konfigurieren, mit angehängtem WinDbg-Debugger zu starten, um Probleme zu behandeln, die mit dem Dienststart zusammenhängen. In diesem Artikel werden beide Methoden beschrieben.

Voraussetzungen

In diesem Artikel wird vorausgesetzt, dass Sie über Erfahrungen in den folgenden Bereichen verfügen:
  • Windows-Dienste
  • WinDbg-Debugger

WinDbg-Debugger nach dem Starten des Dienstes an einen Dienst anhängen

Diese Methode entspricht der Methode, einen Debugger an einen Prozess anzuhängen und den Prozess anschließend zu debuggen.

Prozesskennung des Prozesses verwenden, in dem der Dienst ausgeführt wird

  1. Wenden Sie eine der folgenden Methoden an, um die Prozesskennung (Process ID, PID) des Prozesses zu ermitteln, in dem der zu debuggende Dienst ausgeführt wird.
    • Methode 1: Task-Manager verwenden
      1. Klicken Sie mit der rechten Maustaste auf die Windows-Taskleiste, und klicken Sie auf Task-Manager. Das Dialogfeld Windows Task-Manager wird angezeigt.
      2. Klicken Sie im Dialogfeld Windows Task-Manager auf die Registerkarte Prozesse.
      3. Klicken Sie unter Name auf den Abbildnamen des Prozesses, in dem der zu debuggende Dienst ausgeführt wird. Achten Sie auf die Prozesskennung dieses Prozesses, die durch den Wert im entsprechenden Feld PID angegeben wird.
    • Methode 2: Dienstprogramm "Taskliste" (tlist.exe) verwenden
      1. Klicken Sie auf Start und anschließend auf Ausführen. Das Dialogfeld Ausführen wird angezeigt.
      2. Geben Sie in das Feld Öffnen den Befehl cmd ein, und klicken Sie auf OK.
      3. Ändern Sie an der Eingabeaufforderung den Verzeichnispfad, sodass er auf den Speicherort der Datei "tlist.exe" auf Ihrem Computer verweist.

        Hinweis: Die Datei "tlist.exe" befindet sich normalerweise in folgendem Verzeichnis: C:\Programme\Debugging Tools für Windows
      4. Geben Sie an der Eingabeaufforderung tlist ein, um die Abbildnamen und Prozesskennungen aller Prozesse aufzulisten, die derzeit auf Ihrem Computer ausgeführt werden.

        Hinweis: Notieren Sie sich die Prozesskennung des Prozesses, in dem der zu debuggende Dienst ausgeführt wird.
  2. Ändern Sie an einer Eingabeaufforderung den Verzeichnispfad, sodass er auf den Speicherort der Datei "windbg.exe" auf Ihrem Computer verweist.

    Hinweis: Wenn keine Eingabeaufforderung geöffnet ist, führen Sie die Schritte a und b der Methode 1 aus. Die Datei "windbg.exe" befindet sich normalerweise in folgendem Verzeichnis: C:\Programme\Debugging Tools für Windows.
  3. Geben Sie an der Eingabeaufforderung windbg ?p Prozesskennung /g ein, um den WinDbg-Debugger an den Prozess anzuhängen, in dem der Dienst ausgeführt wird.

    Hinweis: Prozesskennung ist ein Platzhalter für die Prozesskennung des Prozesses, in dem der zu debuggende Dienst ausgeführt wird.

Abbildnamen des Prozesses verwenden, in dem der Dienst ausgeführt wird

Sie können diese Methode nur anwenden, wenn es genau eine ausgeführte Instanz des Prozesses gibt, in dem der zu debuggende Dienst ausgeführt wird. Gehen Sie hierzu folgendermaßen vor:
  1. Klicken Sie auf Start und anschließend auf Ausführen. Das Dialogfeld Ausführen wird angezeigt.
  2. Geben Sie cmd in das Feld Öffnen ein, und klicken Sie auf OK, um ein Eingabeaufforderungsfenster zu öffnen.
  3. Ändern Sie an der Eingabeaufforderung den Verzeichnispfad, sodass er auf den Speicherort der Datei "windbg.exe" auf Ihrem Computer verweist.

    Hinweis: Die Datei "windbg.exe" befindet sich normalerweise in folgendem Verzeichnis: C:\Programme\Debugging Tools für Windows.
  4. Geben Sie an der Eingabeaufforderung windbg ?pn Abbildname /g ein, um den WinDbg-Debugger an den Prozess anzuhängen, in dem der Dienst ausgeführt wird.

    Hinweis:Abbildname ist ein Platzhalter für den Abbildnamen des Prozesses, in dem der zu debuggende Dienst ausgeführt wird. Die Befehlszeilenoption "-pn" gibt an, dass das Befehlszeilenargument Abbildname der Abbildname eines Prozesses ist.

WinDbg-Debugger starten und an den Prozess anhängen, in dem der Dienst ausgeführt wird

  1. Starten Sie Windows Explorer.
  2. Suchen Sie die Datei "windbg.exe" auf Ihrem Computer.

    Hinweis: Die Datei "windbg.exe" befindet sich normalerweise in folgendem Verzeichnis: C:\Programme\Debugging Tools für Windows
  3. Führen Sie die Datei "windbg.exe" zusammen mit der Befehlszeilenoption /g aus, um den WinDbg-Debugger zu starten. Die Befehlszeilenoption /g ermöglicht dem überwachten Prozess weiterzulaufen, nachdem der Haltepunkt gesetzt wurde.
  4. Klicken Sie im Menü Datei auf An einen Prozess anhängen (Attach to a Process), um das Dialogfeld An den Prozess anhängen anzuzeigen.
  5. Wählen Sie den Knoten aus, der dem Prozess entspricht, in dem der zu debuggende Dienst ausgeführt wird, und klicken Sie auf OK.
  6. Klicken Sie in dem angezeigten Dialogfeld auf Ja, um Basisinformationen zum Arbeitsbereich zu speichern. Sie können nun den disassemblierten Code Ihres Dienstes debuggen.

Einen Dienst darauf konfigurieren, mit angehängtem WinDbg-Debugger zu starten

Sie können diese Methode zum Debuggen eines Dienstes anwenden, um Probleme zu behandeln, die mit dem Dienststart zusammenhängen.
  1. Konfigurieren Sie die Optionen für "Image File Execution". Wenden Sie hierzu eine der folgenden Methoden an:
    • Methode 1: Global Flags Editor (gflags.exe) verwenden
      1. Starten Sie Windows Explorer.
      2. Suchen Sie die Datei "gflags.exe" auf Ihrem Computer.

        Hinweis: Die Datei "gflags.exe" befindet sich normalerweise in folgendem Verzeichnis: C:\Programme\Debugging Tools für Windows.
      3. Führen Sie die Datei "gflags.exe" aus, um den Global Flags Editor zu starten.
      4. Geben Sie im Textfeld Image File Name (Abbilddatei-Name) den Abbildnamen des Prozesses ein, in dem der zu debuggende Dienst ausgeführt wird. Wenn Sie zum Beispiel einen Dienst debuggen möchten, der in einem Prozess mit dem Abbildnamen "MyService.exe" ausgeführt wird, geben Sie MyService.exe ein.
      5. Aktivieren Sie unter Destination (Ziel) die Option Image File Options (Abbilddatei-Optionen).
      6. Aktivieren Sie unter Image Debugger Options (Abbilddebugger-Optionen) das Kontrollkästchen Debugger.
      7. Geben Sie im Textfeld Debugger den vollständigen Pfad zu dem Debugger ein, den Sie verwenden möchten. Wenn Sie zum Beispiel den WinDbg-Debugger zum Debuggen eines Dienstes verwenden möchten, können Sie einen vollständigen Pfad eingeben, der in etwa wie folgt aussieht: C:\Programme\Debugging Tools für Windows\windbg.exe
      8. Klicken Sie auf Apply (Übernehmen) und auf OK, um den Global Flags Editor zu beenden.
    • Methode 2: Registrierungs-Editor verwenden
      1. Klicken Sie auf Start und anschließend auf Ausführen. Das Dialogfeld Ausführen wird angezeigt.
      2. Geben Sie regedit in das Feld Öffnen ein, und klicken Sie auf OK, um den Registrierungs-Editor zu starten.
      3. Warnung: Die unkorrekte Verwendung des Registrierungs-Editors kann schwerwiegende Probleme verursachen, die das gesamte System betreffen und eine Neuinstallation des Betriebssystems erforderlich machen. Microsoft kann nicht garantieren, dass Probleme, die von einer falschen Verwendung des Registrierungs-Editors herrühren, behoben werden können. Benutzen Sie den Registrierungs-Editor auf eigene Verantwortung.

        Suchen Sie im Registrierungs-Editor den folgenden Unterschlüssel, und klicken Sie mit der rechten Maustaste darauf:
        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
      4. Zeigen Sie auf Neu, und klicken Sie anschließend auf Schlüssel. Sie können sehen, dass im linken Fenster des Registrierungs-Editors Neuer Schlüssel #1 (der Name eines neuen Unterschlüssels) zur Bearbeitung ausgewählt ist.
      5. Geben Sie Abbildname ein, um Neuer Schlüssel #1 zu ersetzen, und drücken Sie die [EINGABETASTE].

        Hinweis: Abbildname ist ein Platzhalter für den Abbildnamen des Prozesses, in dem der zu debuggende Dienst ausgeführt wird. Wenn Sie zum Beispiel einen Dienst debuggen möchten, der in einem Prozess mit dem Abbildnamen "MyService.exe" ausgeführt wird, geben Sie MyService.exe ein.
      6. Klicken Sie mit der rechten Maustaste auf den in Schritt e erstellten Unterschlüssel.
      7. Zeigen Sie auf Neu, und klicken Sie auf Zeichenfolge. Sie können sehen, dass im rechten Fenster des Registrierungs-Editors Neuer Wert #1 (der Name eines neuen Registrierungseintrags) zur Bearbeitung ausgewählt ist.
      8. Ersetzen Sie Neuer Wert #1 durch Debugger, und drücken Sie die [EINGABETASTE].
      9. Klicken Sie mit der rechten Maustaste auf den in Schritt h erstellten Registrierungseintrag Debugger, und klicken Sie auf Ändern. Das Dialogfeld Zeichenfolge bearbeiten wird angezeigt.
      10. Geben Sie im Textfeld Wert den Debuggerpfad ein, und klicken Sie auf OK.

        Hinweis: Debuggerpfad ist ein Platzhalter für den vollständigen Pfad zu dem Debugger, den Sie verwenden möchten. Wenn Sie zum Beispiel den WinDbg-Debugger zum Debuggen eines Dienstes verwenden möchten, können Sie einen vollständigen Pfad eingeben, der in etwa wie folgt aussieht:
        C:\Progra~1\Debugg~1\windbg.exe
  2. Damit das Debuggerfenster auf Ihrem Desktop angezeigt wird und eine Interaktion mit dem Debugger möglich ist, müssen Sie den Datenaustausch zwischen dem Dienst und dem Desktop ermöglichen (den Dienst "interaktiv" machen). Wenn Sie dies nicht tun, wird der Debugger zwar gestartet, Sie können ihn aber nicht sehen und keine Befehle ausgeben. Wenden Sie eine der folgenden Methoden an, um den Dienst interaktiv zu machen:
    • Methode 1: Konsole "Dienste" verwenden
      1. Klicken Sie auf Start, und zeigen Sie auf Programme.
      2. Zeigen Sie im Menü Programme auf Verwaltung, und klicken Sie auf Dienste. Die Konsole Dienste wird angezeigt.
      3. Klicken Sie im rechten Fenster der Konsole Dienste mit der rechten Maustaste auf Dienstname, und klicken Sie auf Eigenschaften.

        Hinweis: Dienstname ist ein Platzhalter für den Namen des Dienstes, den Sie debuggen möchten.
      4. Aktivieren Sie auf der Registerkarte Anmelden unter Lokales Systemkonto das Kontrollkästchen Datenaustausch zwischen Dienst und Desktop zulassen, und klicken Sie auf OK.
    • Methode 2: Registrierungs-Editor verwenden
      1. Klicken Sie im Registrierungs-Editor auf den folgenden Unterschlüssel:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
        Hinweis: Ersetzen Sie ServiceName durch den Namen des Dienstes, den Sie debuggen möchten. Wenn Sie zum Beispiel den Dienst mit dem Namen "MyService" debuggen möchten, klicken Sie auf folgenden Registrierungsschlüssel:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService
      2. Klicken Sie im rechten Fenster des Registrierungs-Editors unter dem Feld Name mit der rechten Maustaste auf Typ, und klicken Sie auf Ändern. Das Dialogfeld DWORD-Wert bearbeiten wird angezeigt.
      3. Ändern Sie den Text im Feld Wert auf das Ergebnis der binären ODER-Operation, wobei Sie den Binärwert des aktuellen Textes und den Binärwert 0x00000100 als Operanden verwenden. Der Binärwert 0x00000100 entspricht der Konstanten SERVICE_INTERACTIVE_PROCESS, die in der Headerdatei "WinNT.h" auf Ihrem Computer definiert ist. Diese Konstante gibt an, dass ein Dienst interaktiv ist.
  3. Wenn ein Dienst gestartet wird, übermittelt er an den Dienststeuerungs-Manager, wie lange er zum Starten braucht (das Zeitlimit für den Dienst). Wenn der Dienststeuerungs-Manager innerhalb dieses Zeitlimits keine Meldung "Dienst gestartet" von dem Dienst empfängt, beendet er den Prozess, in dem der Dienst ausgeführt wird. Dieses Zeitlimit beträgt normalerweise weniger als 30 Sekunden. Wenn Sie dieses Zeitlimit nicht festlegen, beendet der Dienststeuerungs-Manager den Prozess und den angehängten Debugger, während Sie versuchen, den Dienst zu debuggen. Gehen Sie folgendermaßen vor, um dieses Zeitlimit festzulegen:
    1. Suchen Sie im Registrierungs-Editor den folgenden Unterschlüssel, und klicken Sie mit der rechten Maustaste darauf:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
    2. Zeigen Sie auf Neu, und klicken Sie auf DWORD-Wert. Sie können sehen, dass im rechten Fenster des Registrierungs-Editors Neuer Wert #1 (der Name eines neuen Registrierungseintrags) zur Bearbeitung ausgewählt ist.
    3. Geben Sie ServicesPipeTimeout ein, um Neuer Wert #1 zu ersetzen, und drücken Sie die [EINGABETASTE].
    4. Klicken Sie mit der rechten Maustaste auf den in Schritt c erstellten Registrierungseintrag ServicesPipeTimeout, und klicken Sie auf Ändern. Das Dialogfeld DWORD-Wert bearbeiten wird angezeigt.
    5. Geben Sie im Textfeld Wert das Zeitlimit ein, und klicken Sie auf OK.

      Hinweis: Zeitlimit ist ein Platzhalter für den Zeitlimit-Wert (in Millisekunden), den Sie für den Dienst festlegen möchten. Wenn Sie zum Beispiel als Zeitlimit 24 Stunden (86.400.000 Millisekunden) festlegen möchten, geben Sie 86400000 ein.
    6. Starten Sie den Computer neu. Der Computer muss neu gestartet werden, damit der Dienststeuerungs-Manager diese Änderung übernimmt.
  4. Starten Sie Ihren Windows-Dienst. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie auf Start, und zeigen Sie auf Programme.
    2. Zeigen Sie im Menü Programme auf Verwaltung, und klicken Sie auf Dienste. Die Konsole Dienste wird angezeigt.
    3. Klicken Sie im rechten Fenster der Konsole Dienste mit der rechten Maustaste auf Dienstname, und klicken Sie auf Starten.

      Hinweis: Dienstname ist ein Platzhalter für den Namen des Dienstes, den Sie debuggen möchten.

Problembehandlung

Bevor Sie versuchen, einen Dienst über ein Netzwerk zu debuggen, stellen Sie sicher, dass Sie auf die von dem Dienst verwendeten Symbole und Quelldateien von dem Computer aus zugreifen können, auf dem der Dienst ausgeführt wird. Wenden Sie hierzu eine der folgenden Methoden an:
  • Weisen Sie der Gruppe "Jeder" zumindest Leseberechtigungen für den Ordner auf Ihrem Computer zu, der die von dem Dienst verwendeten Symbole und Quelldateien enthält.
  • Kopieren Sie diese Symbole und Quelldateien, die der Dienst verwendet, auf den Computer, auf dem der Dienst ausgeführt wird.

Informationsquellen

Besuchen Sie die folgende Microsoft-Website, um die in diesem Artikel genannten Tools und Programme herunterzuladen:
Debugging tools for Windows: Overview (Überblick über Debugging-Tools für Windows)
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
Weitere Informationen finden Sie auf den folgenden MSDN-Websites:
WinDbg-Debugger
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
Services (Dienste)
http://msdn2.microsoft.com/de-de/library/ms685141.aspx
TList: Task list application sample (TList: Anwendungsbeispiel für Taskliste)
http://msdn.microsoft.com/library/en-us/vcsample98/html/vcsmptlist.asp
Using the Global Flags utility (Verwenden des Global Flags-Dienstprogramms)
http://msdn2.microsoft.com/de-de/library/ms792858.aspx

Eigenschaften

Artikel-ID: 824344 - Geändert am: Montag, 19. März 2007 - Version: 6.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Service Pack 1a
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Service Pack 1a
Keywords: 
kbhowtomaster kbregistry kbimghlp kbmisctools kbservice kbdebug KB824344
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com