TN063: Debuggen von Internet-Erweiterungs-DLLs

Wenn Sie eine Internetservererweiterungs-DLL geschrieben haben, ist Sie möglicherweise daran interessiert, es unter dem Debugger ausgeführt, so dass Sie ihre Ausführung, Breakpoints gesetzt sowie oder Monitor Variablenwerte verfolgen können, nachdem die Erweiterung aufgerufen wird. Microsoft Internet Information Server (IIS) unternehmungslustig mit Ihrer DLL im Debugger ist ein wenig kompliziert. Sie müssen zuerst einen ruhigen Server finden, können Sie die DLL in einer kontrollierten Umgebung debuggen. Wenn Sie eine solche Ressource gefunden haben, können Sie beginnen, Ihre DLL Debuggen.

Aufgrund der Unterschiede zwischen Version 3.0 und 4.0 von IIS ist es wichtig zu wissen, welche Version Sie verwenden, um die DLL Debuggen.

Debuggen mithilfe von Internet Information Server (3.0 und früher)

Gehen Sie folgendermaßen vor um Debuggen Sie eine Internetservererweiterungs-DLL, die mit IIS 3.0:

  1. Beenden Sie die IIS-Dienste veröffentlichen mithilfe des IIS-Managers oder durch Beenden der Dienste mit dem Dienste-Symbol in der Windows NT Advanced Server Control Panel. Beachten Sie, dass Sie alle drei Dienste beenden müssen, obwohl Sie nur Erweiterungen des World Wide Web-Publishingdienst debuggen. Um die Dinge einfacher zu machen, können Sie die Dienste "Manuell" in der Systemsteuerung gestartet, damit Sie später in Ihre Entwicklung diesen Schritt vermeiden können.

  2. Starten Sie Microsoft Visual C++, und klicken Sie auf den Befehl Workspace schließen im Menü Datei auf Schließen Sie alle geöffneten Arbeitsbereich.

  3. Klicken Sie im Menü Datei auf Arbeitsbereich öffnen , öffnen Sie den INETINFO.EXE-Programm. Diese Datei ist in das Verzeichnis, in dem Sie die Microsoft Internet Information Server installiert.

  4. Im Menü Projekt klicken Sie auf Einstellungen, und klicken Sie auf die Debuggen -Registerkarte im Dialogfeld Projekteinstellungen.

  5. Geben Sie mit Allgemein im Feld Kategorie ausgewählt Folgendes in das Textfeld Programmargumente:

    -e W3Svc

  6. Wählen Sie Zusätzliche DLLs aus der Kategorie Dropdown Liste. Geben Sie dann im Feld Lokale Namen den vollständigen Pfad und Namen der Erweiterungs-DLL oder DLLs. Stellen Sie sicher, dass das Kontrollkästchen neben jedem markiert ist.

  7. Klicken Sie auf OK , um das Dialogfeld Projekteinstellungen zu schließen.

  8. Stellen Sie sicher, dass die.PDB-Datei für die DLL ist im selben Verzeichnis wie die DLLs, die Sie debuggen möchten.

Debuggen Tipps

Der IIS kann als eine interaktive Anwendung ausgeführt werden, das viel einfacher debuggen. Dazu müssen Sie einige Änderungen an Ihrem System vornehmen. Für das Benutzerkonto, das Sie sich zu den Server unter führen, müssen Sie einige Berechtigungen hinzufügen.

Um Berechtigungen hinzuzufügen, führen Sie Benutzer-Manager. (Wenn Sie Windows NT 3.51 verwenden, führen Sie MUSRMGR.EXE. Wenn Sie Windows NT 4.0 verwenden, führen Sie USRMGR.EXE.) Klicken Sie im Menü Richtlinien auf Benutzerrechte . Aktivieren Sie das Kontrollkästchen Erweiterte Benutzerrechte anzeigen . Dann wählen Sie aus der Dropdown-Liste auf der rechten Seite als Teil des Betriebssystems handeln , und fügen Sie den Benutzer-account.

Wiederholen Sie diesen Vorgang mit Generieren von Sicherheitsüberwachungen (auch in der Dropdown Liste auf der rechten Seite). Stellen Sie sicher, dass alle Internet-Dienste (WWW, ftp und Gopher) beendet werden und INETINFO.EXE nicht ausgeführt wird (verwenden Sie TLIST prüfen). Abmelden und wieder anmelden. Sie können dann laden die IIS mit der Befehlszeile:

INetInfo.Exe -e W3Svc

Um IIS unter einem Debugger (z. B. unter WinDbg) zu laden, verwenden Sie die folgende Befehlszeile:

WinDbg INetInfo.Exe -e W3Svc

Sie sind bereit zu gehen. Zeigen Sie in Visual C++ im Menü Erstellen , Debuggen und klicken Sie dann auf Go. Dieser Aktion wird den WWW-Publishingdienst gestartet wird, und des Debuggers bewusst der Symbole in der DLL. Sie können diese Warnung ignorieren, dass die Datei nicht debugging-Informationen.

Wenn Sie Visual C++ schließen, speichern Sie den Arbeitsbereich für INETINFO.EXE. Auf diese Weise können Sie vermeiden Sie die Einstellungen für die Debugsitzung erneut eingeben. Öffnen Sie einfach den INETINFO.MDS-Arbeitsbereich-Datei Wenn Sie bereit sind, den Debugger erneut starten.

Zwischengespeicherte DLLs

Sie können die Registrierungseinstellung auf HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/Parameters/CacheExtensions den Server DLLs jedes Mal neu zu initialisieren, die sie verwendet werden, anpassen. Wenn diese Einstellung 1 ist, wird der Server DLLs geladen im Speicher so lange wie möglich halten. Dies ist die Standardeinstellung für den Server, da es hilft den Server Höchstleistung zu erreichen, und nur geändert werden, sollten wenn Sie den Server zum Debuggen verwenden. Wenn Sie die Einstellung vornehmen 0, der Server wird immer neu Erweiterungs-DLLs jedes Mal, wenn sie verwendet werden.

Zwingt den Server zu laden die DLL ist hilfreich, wenn Ihre DLL möglicherweise abstürzt oder stören alle per-Instanz-Daten, die sie unterhält. Zwingt den Server, die DLL zu initialisieren, können Sie Ihre DLL zurück in einer vorhersagbaren Status mit wenig Aufwand erhalten. Testen Sie die DLL mit der normale CacheExtensions-Einstellung, allerdings nicht, um sicherzustellen, dass Code in der DLL völlig abhängig von diesem ursprünglichen Zustand.

Debuggen mithilfe von Internet Information Server (4.0 und höher)

Es gibt mehrere Möglichkeiten zur Schaffung einer Umgebung für das Debuggen von Serverkomponenten und Internetservererweiterungs-DLLs bei Verwendung von IIS 4.0 oder höher. Wenn Sie einen Debugger Anfügen an einen Windows NT-Prozess kann verwenden, können Sie diese Funktionalität Ihrer Komponente oder Erweiterung zu debuggen. Zum Beispiel beim Debuggen mit Visual C++, die folgenden Schritte:

  1. Starten Sie den Iisadmin-Prozess. Dies kann über die Befehlszeile mit dem Befehl net Start Iisadmin. Sie können auch das Dialogfeld Dienste in der Systemsteuerung verwenden, starten Sie den IIS Admin-Dienst Iisadmin startet.

  2. Starten Sie Visual C++. Zeigen Sie im Menü Erstellen auf Debuggen starten , und klicken Sie auf an den Prozess anhängen.

  3. Aktivieren Sie das Kontrollkästchen Show Systemprozess.

  4. Wählen Sie den Inetinfo-Prozess aus der Liste aus und klicken Sie auf OK.

  5. Starten Sie den w3svc-Dienst. Dies kann über die Befehlszeile mit dem Befehl net Start w3svc ausführen. Das Dialogfeld Dienste in der Systemsteuerung können Sie auch das World Wide Web-Publishingdienst starten.

Wenn der Debugger, den Sie verwenden eine Windows NT-Prozess angehängt werden kann, nehmen Sie die folgenden Schritte aus, um eine geeignete Debugumgebung einzurichten:

  1. Öffnen Sie das Dialogfeld Dienste in der Systemsteuerung.

  2. Wählen Sie den IIS Admin-Dienst, und klicken Sie auf die Schaltfläche Start.

  3. Aktivieren Sie das Kontrollkästchen Dienst Interaktion mit Desktop zulassen , und klicken Sie auf OK.

  4. Wiederholen Sie die Schritte 2 und 3 für alle Prozesse, die unter dem IIS-Verwaltungsprozess laufen z. B. World Wide Web Publishing Service und FTP-Publishingdienst.

  5. Verwenden Sie den Registrierungs-Editor (REGEDIT), fügen Sie einen Unterschlüssel mit dem Namen "Inetinfo.exe" auf den Schlüssel HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/CurrentVersion/Image File Execution Options.

  6. Fügen Sie den folgenden Eintrag zu diesem neuen Schlüssel:

    Debugger = Lt; DebuggerExeName > wo DebuggerExeName den vollständigen Pfad zu dem Debugger ist Sie verwenden.

Wenn das World Wide Web-Publishingdienst gestartet wird, wird auch der Debugger gestartet werden. Sie können jetzt geeigneten Haltepunkte in Ihrem Internet-Server-Erweiterungs-DLL festlegen.

Sie werden nicht in der Lage, Haltepunkte im Quellcode einer Komponente festlegen, bis die Komponente in den Speicher geladen wurde. Um dies zu tun, starten Sie Internet Explorer und Ansicht der.ASP-Seite, die das Objekt enthält. Sobald die Seite geladen wird, sollten Sie in der Lage, Haltepunkte in der Komponente festgelegt sein. Klicken Sie auf Aktualisieren , um die Seite erneut anzuzeigen, und lösen Sie die ausgewählten Haltepunkte aus. Wenn die Komponente nicht einmal geladen werden kann (beispielsweise, wenn der Fehler im Startcode der Komponente auftritt), müssen Sie die Komponenten-DLL zu laden, vor dem Starten der Debugsitzung. (Siehe Schritt 11 unten.)

In einigen Fällen können Sie nicht eine der beiden oben beschriebenen Verfahren verwenden können. Wenn Sie mithilfe dieser Strategien Schwierigkeiten haben, gibt es ein dritter Ansatz, der in früheren Versionen von IIS beschrieben wurde. Dieser dritte Ansatz erfordert die Einrichtung von Windows NT-Sicherheitsberechtigungen sowie Änderungen an der Registrierung vornehmen. Es wird auch Ihre Fähigkeit, Ausführen von IIS als Dienst deaktivieren. Dieser Ansatz sollte nur verwendet werden, wenn die vorherigen beiden Strategien versagt haben.

  1. Verwenden des Benutzer-Managers für Domänen (USRMGR)-Verwaltungstool die Anmelden als Dienst, als Teil des Betriebssystems handelnund Generieren von Sicherheitsüberprüfungen Rechte auf dem lokalen Computer das Windows NT-Konto hinzu, die Sie beim Debuggen der Internetservererweiterungs-DLL verwenden wird.

  2. Verwenden Sie das Dienstprogramm verteilte COM-Konfiguration (DCOMCNFG) die Identität des IIS-Verwaltungsdienst das Benutzerkonto ändern, die Sie für das Debuggen verwendet wird.

  3. Verwenden Sie den Registrierungs-Editor (REGEDIT), um das LocalService-Schlüsselwort aus allen mit IISADMIN verknüpften Unterschlüsseln unter HKEY_CLASSES_ROOT/AppID zu entfernen. Dieses Schlüsselwort kann in den folgenden Unterschlüssel gefunden werden:

    {61738644-F196-11D0-9953-00C04FD919C1} / / IIS WAMREG Admin Service

    {9F0BD3A0-EC01-11D0-A6A0-00A0C922E752} / / IIS Admin Crypto-Erweiterung

    {A9E69610-B80D-11D0-B9B9-00A0C922E750} / / IISADMIN-Dienst

    Das LocalService-Schlüsselwort kann in weitere Unterschlüssel des AppID gefunden werden.

  4. Allen mit IISADMIN verknüpften Unterschlüsseln unter dem CLSID-Knoten der Registrierung LocalServer32-Unterschlüssel hinzufügen. Dazu gehören die Unterschlüssel entsprechend alle Unterschlüssel, die Sie im vorherigen Schritt entfernt. Satz der Standardwert für diese neue Schlüssel zu Lt; Path > \inetinfo.exe -e w3svc. (<path> ist normalerweise "c:\winnt\system32\inetsrv".)

  5. Beenden Sie die www- und FTP-Dienste aus der Microsoft Management Console oder über das Dialogfeld Dienste in der Systemsteuerung.

  6. Starten Sie Visual C++, und wählen Sie die Registerkarte Debuggen im Dialogfeld Projekteinstellungen.

  7. Geben Sie den folgenden Pfad im Feld ausführbare Datei für die Debug-Sitzung:

    C:\WINNT\System32\Inetsrv\Inetinfo.exe

  8. Geben Sie Folgendes im Feld Programmargumente:

    w3svc -e

  9. Wählen Sie die Registerkarte " Verknüpfung " im Dialogfeld " Projekteinstellungen ".

  10. Geben Sie den Namen und Pfad der Internetservererweiterungs-DLL im Feld Ausgabedateiname Debuggen.

  11. Optional können Sie die DLL-Komponente hinzufügen der Liste Zusätzliche DLLs , die geladen werden, bevor die Anwendung gestartet wird. Dies ermöglicht Ihnen, Haltepunkte im Startcode der Komponente festzulegen.

  12. Klicken Sie auf die Schaltfläche Go , um die Debugsitzung starten.

Hinweis&Nbsp;  Nachdem Sie die Debugsitzung abgeschlossen haben, müssen Sie Schritte 5 bis 1 auf die vorherigen Einstellungen wiederherstellen und IIS als Dienst ausführen stornieren.

Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie

Index