TN063 : Débogage de DLL d'Extension Internet

Si vous avez écrit une DLL d'extension Internet Server, vous pourriez être intéressé à y parvenir en cours d'exécution sous le débogueur pour vous pouvez suivre son exécution, ensemble de points d'arrêt ou des valeurs de variable moniteur après que l'extension est appelée. Levez les Microsoft Internet Information Server (IIS) et en cours d'exécution avec votre DLL dans le débogueur sont un peu délicat. Vous devrez d'abord trouver un serveur tranquille où vous pouvez déboguer votre DLL en milieu contrôlé. Une fois que vous avez trouvé une telle ressource, vous pouvez démarrer le débogage de votre DLL.

En raison des différences entre les versions 3.0 et 4.0 d'IIS, il est important de savoir quelle version vous allez utiliser pour déboguer votre fichier DLL.

Débogage à l'aide de Internet Information Server (3.0 et les versions antérieures)

Suivez ces étapes pour déboguer une DLL à l'aide de IIS 3.0 d'extension Internet Server:

  1. Arrêter les services de publication IIS en utilisant le gestionnaire IIS ou en arrêtant les services avec l'icône Services dans le panneau Windows NT Advanced Server contrôle. Notez que vous devez arrêter tous les trois services même si vous déboguez uniquement les extensions pour le service de publication World Wide Web. Pour faciliter les choses, vous pourriez vouloir rendre les services « Manuellement » a commencé dans le panneau de configuration afin que vous pouvez éviter cette étape plus loin dans votre développement.

  2. Démarrez Microsoft Visual C++, puis cliquez sur la commande Workspace fermer dans le menu fichier pour fermer un espace de travail ouvert.

  3. Dans le menu fichier , cliquez sur Espace de travail ouvert pour ouvrir le INETINFO.Programme EXE. Ce fichier se trouve dans le répertoire où vous avez installé Microsoft Internet Information Server.

  4. Dans le menu projet , cliquez sur paramètres, puis cliquez sur l'onglet débogage dans la boîte de dialogue Paramètres du projet.

  5. Avec le général sélectionné dans la zone catégorie , tapez la commande suivante dans la zone de texte Arguments de programme:

    e - W3Svc

  6. Choisissez la catégorie dans la liste déroulante Des DLL supplémentaires . Puis, dans la zone de Noms locaux , spécifiez le chemin d'accès complet et le nom de votre DLL d'extension ou de DLL. Assurez-vous que la case à côté de chacun est marquée.

  7. Cliquez sur OK pour fermer la boîte de dialogue Paramètres du projet.

  8. Assurez-vous que le.Fichier PDB pour votre DLL est dans le même répertoire que les DLL que vous souhaitez déboguer.

Conseils de débogage

IIS peut être exécuté comme une application interactive, rendant beaucoup plus facile de débogage. Pour ce faire, vous devez faire quelques modifications à votre système. Pour le compte d'utilisateur que vous allez exécuter le serveur sous, vous devez ajouter quelques privilèges.

Pour ajouter des privilèges, exécutez le gestionnaire des utilisateurs. (Si vous utilisez Windows NT 3.51, exécutez MUSRMGR.EXE. Si vous utilisez Windows NT 4.0, exécutez USRMGR.EXE.) Cliquez sur les Droits de l'utilisateur dans le menu de politiques . Activez la case à cocher Show Advanced User Rights . Puis sélectionnez la loi dans le cadre du système d'exploitation dans la liste déroulante sur la droite et ajouter le compte d'utilisateur.

Répétez cette procédure avec Générer des Audits de sécurité (également dans la liste déroulante sur la droite). Assurez-vous que tous les Services Internet (WWW, ftp et gopher) sont arrêtés et INETINFO.EXE ne s'exécute pas (utilisez TLIST pour vérifier). Déconnectez-vous et reconnectez-vous en. Vous pouvez ensuite charger IIS avec la ligne de commande:

INetInfo.Exe -e W3Svc

Pour charger IIS sous un débogueur (par exemple, dans le cadre de WinDbg), utilisez la ligne de commande:

WinDbg INetInfo.Exe -e W3Svc

Vous êtes prêt à aller. Dans Visual C++, pointez sur Déboguer dans le menu générer et puis cliquez sur Go. Cette action démarre le service de publication WWW, et le débogueur sera au courant des symboles dans votre DLL. Vous pouvez ignorer l'avertissement que le fichier n'a pas d'informations de débogage.

Lorsque vous fermez Visual C++, économiser de l'espace de travail pour INETINFO.EXE. De cette façon, vous pouvez éviter de réintégrer les paramètres pour la session de débogage. Ouvrez le INETINFO.Fichier d'espace de travail SDM lorsque vous êtes prêt à démarrer le débogueur à nouveau.

DLL en mémoire cache

Vous pouvez ajuster le paramètre de Registre à HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/paramètres/CacheExtensions pour que le serveur à réinitialiser les DLL chaque fois qu'ils sont utilisés. Si ce paramètre est 1, le serveur conservera les DLL chargées en mémoire aussi longtemps que possible. C'est le paramètre par défaut pour le serveur, car elle aide le serveur à obtenir des performances de pointe et ne doit être modifié que si vous utilisez le serveur pour le débogage. Si vous faites le paramètre 0, le serveur sera toujours recharger DLL d'extension chaque fois qu'ils sont utilisés.

Il est utile de forcer le serveur à recharger votre DLL lorsque votre DLL peut être s'écraser ou choquer les données de l'instance qu'elle entretient. En forçant le serveur à réinitialiser la DLL, vous pouvez obtenir votre DLL retour dans un État prévisible avec peu d'effort. Veillez à tester votre DLL en utilisant le paramètre CacheExtensions normal, cependant, pour s'assurer n'est code dans votre DLL pas entièrement dépendant de cet état initial.

Débogage à l'aide de Internet Information Server (4.0 et ultérieures)

Il y a plusieurs façons de créer un environnement pour déboguer vos composants serveur et les DLL d'extension Internet Server lorsque vous utilisez IIS 4.0 ou version ultérieure. Si vous utilisez un débogueur capable d'attacher à un processus Windows NT, vous pouvez utiliser cette fonctionnalité pour déboguer votre composant ou votre extension. Par exemple, si vous déboguez avec Visual C++, suivre les étapes suivantes:

  1. Lancez le processus iisadmin. Cela peut se faire à partir de la ligne de commande avec commande net start iisadmin. Vous pouvez également utiliser la boîte de dialogue Services du panneau de commande pour démarrer le Service IIS Admin, qui démarrera iisadmin.

  2. Démarrez Visual C++. Pointez sur Démarrer le débogage dans le menu générer , puis cliquez sur attacher au processus.

  3. Sélectionnez la case à cocher Afficher les processus système.

  4. Sélectionnez le processus inetinfo dans la liste et cliquez sur OK.

  5. Démarrez le service w3svc. Cela peut se faire à partir de la ligne de commande avec la commande net start w3svc. Vous pouvez également utiliser la boîte de dialogue de Services dans le panneau de commande pour démarrer le Service de publication World Wide Web.

Si le débogueur que vous utilisez ne peut pas attacher à un processus Windows NT, prendre les mesures suivantes pour établir un environnement de débogage approprié:

  1. Ouvrir la boîte de dialogue de Services dans le panneau de contrôle.

  2. Sélectionnez le service IIS Admin et cliquez sur le bouton de démarrage.

  3. Activez la case à cocher Autoriser Service à interagir avec le Bureau , puis cliquez sur OK.

  4. Répétez les étapes 2 et 3 pour tous les processus qui s'exécutent sous le processus IIS Admin, par exemple le Service de publication World Wide Web et le Service de publication FTP.

  5. Utilisez l'éditeur du Registre (REGEDIT) pour ajouter une sous-clé nommée Inetinfo.Exe à la clé HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Image File Execution Options.

  6. Ajoutez l'entrée suivante à cette nouvelle clé:

    Débogueur = lt ; DebuggerExeName > où DebuggerExeName est le chemin complet du débogueur que vous utilisez.

Lorsque le Service de publication World Wide Web est démarré, votre débogueur sera également lancé. Vous pouvez maintenant définir des points d'arrêt appropriés dans votre DLL d'extension Internet Server.

Vous ne pourrez pas définir des points d'arrêt dans le code de la source d'un composant jusqu'à ce que le composant a été chargé en mémoire. Pour ce faire, démarrez Internet Explorer et le point de vue la.Page ASP contenant l'objet. Dès que la page est chargée, vous devriez être capable de définir des points d'arrêt dans votre composant. Cliquez sur actualiser pour afficher la page à nouveau et déclencher les points d'arrêt que vous avez sélectionnée. Si le composant ne peut pas être chargé encore une fois (par exemple, si la défaillance survient dans le code de démarrage du composant), vous devez charger le composant DLL avant de commencer la session de débogage. (Voir l'étape 11 ci-dessous).

Dans certains cas, vous ne peut-être pas en mesure d'utiliser ou l'autre des deux méthodes décrites ci-dessus. Si vous avez des difficultés à l'aide de ces stratégies, il y a une troisième approche, qui a été décrite dans les versions précédentes d'IIS. Cette troisième approche exige l'établissement de privilèges de sécurité Windows NT ainsi apporter des modifications au registre. Il désactivera également votre capacité d'exécuter IIS en tant que service. Cette approche ne doit être utilisée que si les deux stratégies précédentes ont échoué.

  1. Utilisez le gestionnaire des utilisateurs de l'outil administration de domaines (USRMGR) pour ajouter la Connectez-vous en tant que Service, loi dans le cadre du système d'exploitationet les vérifications de sécurité de générer des droits sur l'ordinateur local pour le compte Windows NT que vous utiliserez lors du débogage de la DLL d'extension Internet Server.

  2. Utilisez l'utilitaire de Configuration de COM distribué (DCOMCNFG) pour modifier l'identité du Service IIS Admin pour le compte d'utilisateur que vous utiliserez pour le débogage.

  3. Utilisez l'éditeur du Registre (REGEDIT) pour supprimer le mot clé LocalService de toutes les sous-clés relatives à IISADMIN sous HKEY_CLASSES_ROOT/AppID. Ce mot-clé peut être trouvé dans les sous-clés suivantes:

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

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

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

    Le mot clé LocalService peut-être être trouvé dans les sous-clés supplémentaires d'AppID.

  4. Ajoutez les sous-clés LocalServer32 à toutes les sous-clés relatives à IISADMIN sous le nœud CLSID du Registre. Cela inclura les sous-clés correspondant à toutes les sous-clés que vous avez supprimé à l'étape précédente. Ensemble, la valeur par défaut de ces clés à lt ; chemin > \inetinfo.exe -e w3svc. (<path> est normalement « c:\winnt\system32\inetsrv »).

  5. Arrêtez les services WWW et FTP dans la Console de gestion Microsoft ou dans la boîte de dialogue de Services dans le panneau de contrôle.

  6. Démarrez Visual C++ et sélectionnez l'onglet débogage dans la boîte de dialogue Paramètres du projet.

  7. Tapez le chemin d'accès suivant dans le champ exécutable pour la session de débogage:

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

  8. Tapez la commande suivante dans le champ Arguments de programme:

    e - w3svc

  9. Sélectionnez l'onglet lien dans la boîte de dialogue Paramètres du projet.

  10. Entrez le nom et le chemin d'accès de la DLL que vous déboguez dans le champ nom du fichier de sortie d'extension Internet Server.

  11. Éventuellement, ajouter votre DLL du composant à la liste des DLL supplémentaires qui sont chargés avant le démarrage de l'application. Cela vous permettra de définir des points d'arrêt dans le code de démarrage du composant.

  12. Cliquez sur le bouton Go pour démarrer la session de débogage.

&Notenbsp ;  Après avoir terminé la session de débogage, vous devez inverser les étapes 5 à 1 pour restaurer les paramètres précédents et permettre à IIS exécuter en tant que service.

&Notes techniques par le numéro |nbsp ; Notes techniques par catégorie

Index