TN063: Debug di dll di estensione di Internet

Se avete scritto una DLL di estensione Server Internet, potrebbe essere interessato a ottenerlo in esecuzione sotto il debugger, quindi è possibile rintracciare sua esecuzione, impostare punti di interruzione o i valori delle variabili monitor dopo l'estensione viene chiamata. Alzarsi Microsoft Internet Information Server (IIS) e in esecuzione con la DLL nel debugger è un po ' complicata. Sarà necessario prima di trovare un server tranquillo dove è possibile eseguire il debug DLL in un ambiente controllato. Dopo aver trovato una risorsa, è possibile avviare la DLL di debug.

A causa delle differenze tra la versione 3.0 e 4.0 di IIS, è importante sapere quale versione si prevede di utilizzare per eseguire il debug DLL.

Debug utilizzando Internet Information Server (3.0 e precedenti)

Attenersi alla procedura seguente per eseguire il debug un'estensione del Server Internet DLL utilizzando IIS 3.0:

  1. Arrestare il servizio di pubblicazione di IIS utilizzando Gestione IIS o arrestando i servizi con l'icona di servizi Windows NT Advanced Server pannello di controllo. Si noti che si devono smettere di tutti e tre i servizi anche se si esegue il debug solo le estensioni per pubblicazione servizio World Wide Web. Per semplificare le cose, si potrebbe desiderare di rendere i servizi "Manualmente" iniziati nel pannello di controllo, è possibile evitare questo passaggio più avanti nel vostro sviluppo.

  2. Avviare Microsoft Visual C++ e fare clic sul comando Workspace Chiudi dal menu File per chiudere qualsiasi area di lavoro aperto.

  3. Nel menu File , fare clic su Open Workspace per aprire il INETINFO.Programma EXE. Questo file si trova nella directory dove avete installato Microsoft Internet Information Server.

  4. Dal menu progetto , fare clic su impostazioni, quindi fare clic sulla scheda Debug nella finestra di dialogo Impostazioni progetto.

  5. Con generale selezionato nella casella categoria , digitare quanto segue nella casella di testo Gli argomenti del programma:

    -e W3Svc

  6. Scegliere Le dll aggiuntive dall'elenco a discesa categoria . Quindi, nella casella Nomi locali , specificare il percorso completo e il nome della DLL di estensione o DLLs. assicurarsi che la casella di controllo accanto a ciascuno è contrassegnata.

  7. Fare clic su OK per chiudere la finestra di dialogo Impostazioni progetto.

  8. Fare in modo che il.File PDB per la DLL è nella stessa directory come le dll si prevede di eseguire il debug.

Consigli di debug

IIS può essere eseguito come un'applicazione interattiva, rendendo molto più facile di debug. Per fare questo è necessario apportare alcune modifiche al vostro sistema. Per l'account utente che si sta per eseguire il server sotto, è necessario aggiungere alcuni privilegi.

Per aggiungere dei privilegi, eseguire User Manager. (Se stai usando Windows NT 3.51, eseguire MUSRMGR.EXE. Se stai usando Windows NT 4.0, eseguire USRMGR.EXE.) Fare clic su Diritti utente dal menu politiche . Selezionare la casella di controllo Visualizza diritti utente avanzato . Selezionare quindi atto come parte del sistema operativo dall'elenco a discesa sulla destra e aggiungere l'account utente.

Ripetere questo processo con Generazione di controlli di sicurezza (anche nell'elenco a discesa sulla destra). Assicurarsi che tutti i servizi di Internet (WWW, ftp e gopher) vengono fermati e INETINFO.EXE non è in esecuzione (utilizzare TLIST per controllare). Disconnettersi e riconnettersi. Si può quindi caricare l'IIS con la riga di comando:

Inetinfo. exe -e W3Svc

Per caricare IIS in un debugger (ad esempio, sotto WinDbg), utilizzare la seguente riga di comando:

WinDbg Inetinfo -e W3Svc

Siete pronti ad andare. In Visual C++, scegliere dal menu Build di Debug e quindi fare clic su Vai. Questa azione inizia il servizio pubblicazione sul WWW, e il debugger saranno a conoscenza dei simboli nella DLL. Si può ignorare l'avviso che il file non dispone di informazioni di debug.

Quando si chiude Visual C++, salvo per l'area di lavoro per INETINFO.EXE. In questo modo, è possibile evitare rientrando le impostazioni per la sessione di debug. Basta aprire il INETINFO.File di area di lavoro MDS quando si è pronti per ricominciare il debugger.

Dll nella cache

È possibile regolare l'impostazione del Registro di sistema in HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/parametri/CacheExtensions per avere il server reinizializzi le dll ogni volta che vengono utilizzate. Se questa impostazione è 1, il server manterrà DLL caricate in memoria più a lungo possibile. Questa è l'impostazione predefinita per il server, dal momento che aiuta il server di ottenere il prestazioni delle massimo e dovrebbe essere modificato solo se si utilizza il server per il debug. Se si effettua l'impostazione 0, il server sempre ricaricherà le dll di estensione ogni volta che vengono utilizzate.

Costringendo il server per ricaricare la DLL è utile quando la DLL potrebbe essere schiantarsi o sconvolgendo tutti i dati per istanza che essa sostiene. Imponendo il server per reinizializzare la DLL, è possibile ottenere la DLL torna in uno stato prevedibile con il minimo sforzo. Assicurarsi di testare la DLL utilizzando l'impostazione CacheExtensions normale, tuttavia, non per assicurarsi che il codice nella DLL è completamente dipendente da quello stato iniziale.

Debug utilizzando Internet Information Server (4.0 e successive)

Ci sono diversi modi per creare un ambiente per il debug vostri componenti server e le dll di estensione Internet Server quando si utilizza IIS 4.0 o versioni successive. Se si utilizza un debugger in grado di associare a un processo di Windows NT, è possibile utilizzare questa funzionalità per eseguire il debug il componente o l'estensione. Ad esempio, se si esegue il debug con Visual C++, prendere i seguenti passaggi:

  1. Avviare il processo di iisadmin. Questo può essere fatto da riga di comando con il comando net start iisadmin. È anche possibile utilizzare la finestra di dialogo servizi dal pannello di controllo per avviare il servizio amministrazione di IIS, che avrà inizio iisadmin.

  2. Avviare Visual C++. Scegliere dal menu Build per Iniziare a eseguire il Debug e fare clic su Connetti a processo.

  3. Selezionare la casella di controllo Visualizza un processo di sistema.

  4. Selezionare il processo inetinfo dall'elenco e fare clic su OK.

  5. Avviare il servizio w3svc. Questo può essere fatto da riga di comando con il comando net start w3svc. È inoltre possibile utilizzare la finestra di dialogo servizi nel pannello di controllo per avviare il servizio pubblicazione sul World Wide Web.

Se il debugger che utilizzi non può connettersi a un processo di Windows NT, prendere i passaggi seguenti per stabilire un adeguato ambiente di debugging:

  1. Aprire la finestra di dialogo servizi nel pannello di controllo.

  2. Selezionare il servizio amministrazione di IIS e fare clic sul pulsante di avvio.

  3. Selezionare la casella di controllo Consentire Service di Interact con Desktop e fare clic su OK.

  4. Ripetere i passaggi 2 e 3 per tutti i processi che vengono eseguiti nell'ambito del processo di amministrazione di IIS, ad esempio il servizio pubblicazione sul World Wide Web e il servizio di pubblicazione FTP.

  5. Utilizzare l'Editor del Registro di sistema (REGEDIT) per aggiungere una sottochiave denominata Inetinfo. exe alla chiave HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Image File Execution Options.

  6. Aggiungere la seguente voce a questa nuova chiave:

    Debugger = lt; DebuggerExeName > dove DebuggerExeName è il percorso completo per il debug si utilizza.

Quando viene avviato il servizio pubblicazione sul World Wide Web, debugger anche sarà lanciato. È ora possibile impostare punti di interruzione appropriate la DLL di estensione Internet Server.

Non sarà in grado di impostare punti di interruzione nel codice sorgente di un componente, fino a quando il componente è stato caricato nella memoria. A tale scopo, avviare Internet Explorer e vista la.Pagina ASP che contiene l'oggetto. Non appena viene caricata la pagina, dovrebbe essere in grado di impostare punti di interruzione nel componente. Fare clic su Aggiorna per visualizzare la pagina ancora una volta e innescare i punti di interruzione che è stato selezionato. Se il componente non può essere caricato ancora una volta (per esempio, se l'errore si verifica nel codice di avvio del componente), è necessario caricare il componente DLL prima di iniziare la sessione di debug. (Vedi passo 11 qui sotto).

In alcuni casi, potrebbe non essere in grado di utilizzare una delle due procedure di cui sopra. Se avete difficoltà ad usare una di queste strategie, c'è un terzo approccio, che è stato descritto nelle versioni precedenti di IIS. Questo terzo approccio richiede la determinazione di privilegi di protezione di Windows NT nonché di apportare modifiche al Registro di sistema. Disattiverà anche la capacità di eseguire IIS come servizio. Questo approccio dovrebbe essere utilizzato solo se le precedenti due strategie hanno fallito.

  1. Utilizzare Gestione utente per strumento di amministrazione di domini (USRMGR) per aggiungere accesso come servizio, atto come parte del sistema operativoe controlli di protezione genera diritti sul computer locale per l'account di Windows NT che verrà utilizzato durante il debug di DLL di estensione Internet Server.

  2. Utilizzare l'utilità di configurazione COM distribuito (DCOMCNFG) per modificare l'identità del servizio IIS Admin all'account utente che verrà utilizzato per il debug.

  3. Utilizzare l'Editor del Registro di sistema (REGEDIT) per rimuovere la parola chiave LocalService da tutte le sottochiavi correlate a IISADMIN sotto HKEY_CLASSES_ROOT/AppID. Questa parola chiave possa essere trovata nelle seguenti sottochiavi:

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

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

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

    La parola chiave LocalService possa essere trovata nelle sottochiavi supplementari di AppID.

  4. Aggiungere le sottochiavi LocalServer32 a tutte le sottochiavi correlate a IISADMIN sotto il nodo CLSID del Registro di sistema. Ciò comprende le sottochiavi corrispondenti a tutte le sottochiavi che è stato rimosso nel passaggio precedente. Impostare il valore predefinito di queste nuove chiavi a lt; percorso > w3svc -e \inetinfo.exe. (<path> è normalmente "c:\winnt\system32\inetsrv").

  5. Arrestare i servizi WWW e FTP da Microsoft Management Console o nella finestra di dialogo servizi nel pannello di controllo.

  6. Avviare Visual C++ e selezionare la scheda Debug nella finestra di dialogo Impostazioni progetto.

  7. Digitare il seguente percorso nel campo eseguibile per la sessione di debug:

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

  8. Digitare quanto segue nel campo Argomenti del programma:

    w3svc -e

  9. Selezionare la scheda di collegamento nella finestra di dialogo Impostazioni progetto.

  10. Immettere il nome e il percorso dell'estensione Server Internet DLL debug nel campo nome file di Output.

  11. Facoltativamente, aggiungere il componente DLL all'elenco delle Dll aggiuntive che vengono caricati prima dell'avvio dell'applicazione. Questo vi permetterà di impostare punti di interruzione nel codice di avvio del componente.

  12. Fare clic sul pulsante Vai per avviare la sessione di debug.

&Notanbsp;  Dopo aver completato la sessione di debug, si devono invertire i passaggi da 5 a 1 per ripristinare le impostazioni precedenti e consentire di IIS per l'esecuzione come servizio.

&Note tecniche per numero |nbsp; Note tecniche per la categoria

Index