TN063: Depuración de archivos DLL de extensión de Internet

Si ha escrito un archivo DLL de extensión de servidor de Internet, podría ser interesado en obtener corriendo bajo el depurador, por lo que se pueden rastrear su ejecución, establecer puntos de interrupción o valores de variables de monitor después de llama a la extensión. Son un poco complicado obtener Microsoft Internet Information Server (IIS) y ejecutar con el archivo DLL en el depurador. Necesita encontrar primero un servidor tranquilo donde puede depurar su DLL en un entorno controlado. Una vez que haya encontrado un recurso, puede iniciar la depuración de la DLL.

Debido a las diferencias entre la versión 3.0 y 4.0 de IIS, es importante saber qué versión va a utilizar para depurar el archivo DLL.

Depuración mediante Internet Information Server (3.0 y versiones anteriores)

Siga estos pasos para depurar una DLL usando IIS 3.0 de extensión de Internet Server:

  1. Detenga los servicios de publicación de IIS utilizando el administrador de IIS o deteniendo los servicios con el icono de servicios en el Panel de Control del Windows NT Advanced Server. Tenga en cuenta que debe detener todos los servicios de tres aunque sólo depura las extensiones de servicio de publicación World Wide Web. Para facilitar las cosas, tal vez desee hacer los servicios "Manualmente" comenzó en Panel de Control para que pueda evitar este paso más adelante en su desarrollo.

  2. Inicie Microsoft Visual C++ y haga clic en el comando de Área de cerrar en el menú archivo para cerrar cualquier espacio de trabajo abierto.

  3. En el menú archivo , haga clic en Abrir espacio de trabajo para abrir el INETINFO.Programa EXE. Este archivo se encuentra en el directorio donde instaló Microsoft Internet Information Server.

  4. En el menú proyecto , haga clic en configuracióny, a continuación, haga clic en la ficha Depurar en el cuadro de diálogo Ajustes del proyecto.

  5. Con General seleccionado en el cuadro categoría , escriba lo siguiente en el cuadro de texto Argumentos de programa:

    -e W3Svc

  6. Elija Archivos DLL adicionales en la lista desplegable categoría . A continuación, en el cuadro de Nombres Local , especifique la ruta de acceso completa y el nombre del archivo DLL de extensión o DLL. Compruebe que está marcada la casilla de verificación junto a cada uno.

  7. Haga clic en Aceptar para cerrar el cuadro de diálogo Ajustes del proyecto.

  8. Asegúrese de que el.Archivo PDB de la DLL se encuentra en el mismo directorio que la DLL que se va a depurar.

Sugerencias de depuración

IIS se puede ejecutar como una aplicación interactiva, haciendo mucho más fácil de depuración. Para ello necesita hacer algunos cambios en su sistema. Para la cuenta de usuario que va a ejecutar el servidor bajo, hay que agregar unos privilegios.

Para agregar privilegios, ejecute el administrador de usuarios. (Si está utilizando Windows NT 3.51, ejecute MUSRMGR.EXE. Si está utilizando Windows NT 4.0, ejecute USRMGR.EXE). Haga clic en Derechos de usuario en el menú directivas . Seleccione la casilla de verificación Mostrar derechos de usuario avanzado . A continuación, actuar como parte del sistema operativo , seleccione la lista desplegable de la derecha y agregue la cuenta de usuario.

Repita este proceso con Generar auditorías de seguridad (también en la lista desplegable de la derecha). Asegúrese de que todos los servicios de Internet (WWW, ftp y gopher) se detienen y INETINFO.EXE no se está ejecutando (utilice TLIST para comprobar). Cierre la sesión e inicie sesión en. A continuación, puede cargar el IIS con la línea de comandos:

INetInfo.Exe -e W3Svc

Para cargar IIS bajo un depurador (por ejemplo, en virtud de WinDbg), utilice la siguiente línea de comandos:

WinDbg INetInfo.Exe -e W3Svc

Estás listo para ir. En Visual C++, Depurar elija en el menú generar y, a continuación, haga clic en ir. Esta acción inicia el servicio de publicación de WWW y el depurador será consciente de símbolos en la DLL. Puede ignorar la advertencia de que el archivo no tiene información de depuración.

Cuando cierre Visual C++, guardar el espacio de trabajo para INETINFO.EXE. De este modo, puede evitar reingreso la configuración para la sesión de depuración. Simplemente abra el INETINFO.Archivo de área de trabajo MDS cuando esté listo para volver a iniciar el depurador.

En la memoria caché de archivos DLL

Puede ajustar la configuración del registro en HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/servicios/W3SVC/parámetros/CacheExtensions para que el servidor reinicializar DLLs cada vez que se utilicen. Si este valor es 1, el servidor mantendrá DLL cargadas en la memoria siempre que sea posible. Esta es la configuración predeterminada para el servidor, ya que ayuda a que el servidor de lograr el máximo rendimiento y debe cambiarse sólo si utiliza el servidor para la depuración. Si haces el valor 0, el servidor siempre recargará las DLL de extensión cada vez se utilizan.

Forzar el servidor para volver a cargar el archivo DLL es útil cuando el archivo DLL podría estrellarse o perturbar cualquier dato por instancias que mantiene. Forzando el servidor para reinicializar la DLL, puede obtener el archivo DLL volver a un Estado previsible con poco esfuerzo. Asegúrese de probar su DLL mediante el ajuste de CacheExtensions normal, sin embargo, para asegurarse de código en el archivo DLL no es completamente dependiente de ese estado inicial.

Depuración mediante Internet Information Server (4.0 y posteriores)

Hay varias formas de establecer un entorno de depuración de los componentes de servidor y archivos DLL de extensión de servidor de Internet al utilizar IIS 4.0 o posterior. Si está utilizando a un depurador capaz de asociar a un proceso de Windows NT, puede utilizar esta funcionalidad para depurar el componente o la extensión. Por ejemplo, si está depurando con Visual C++, tomar los pasos siguientes:

  1. Iniciar el proceso de iisadmin. Esto puede hacerse desde la línea de comandos con el comando net start iisadmin. También puede utilizar el cuadro de diálogo de servicios desde el Panel de Control para iniciar el servicio de administración de IIS, que se iniciará iisadmin.

  2. Inicie Visual C++. Elija Iniciar depuración en el menú generar y haga clic en asociar al proceso.

  3. Seleccione la casilla de verificación Mostrar el proceso de sistema.

  4. Seleccione el proceso inetinfo de la lista y haga clic en Aceptar.

  5. Inicie el servicio w3svc. Esto puede hacerse desde la línea de comandos con el comando net start w3svc. También puede utilizar el cuadro de diálogo de servicios en el Panel de Control para iniciar el servicio de publicación World Wide Web.

Si el depurador que está utilizando no se puede adjuntar a un proceso de Windows NT, tomar los siguientes pasos para establecer un entorno de depuración adecuado:

  1. Abrir el cuadro de diálogo de servicios en el Panel de Control.

  2. Seleccione el servicio de administración de IIS y haga clic en el botón Inicio.

  3. Seleccione la casilla de verificación Permitir a los servicios interactuar con el escritorio y haga clic en Aceptar.

  4. Repita los pasos 2 y 3 para todos los procesos que se ejecutan en el proceso de administración de IIS, por ejemplo el servicio de publicación World Wide Web y el servicio de publicación FTP.

  5. Utilice el Editor del registro (REGEDIT) para agregar una subclave llamada Inetinfo.Exe a la clave HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Image File Execution Options.

  6. Agregue la siguiente entrada a esta nueva clave:

    Depurador = lt; DebuggerExeName > donde DebuggerExeName es la ruta completa para el depurador está utilizando.

Cuando se inicia el servicio de publicación World Wide Web, también se iniciará el depurador. Ahora puede establecer puntos de interrupción correspondientes en el archivo DLL de extensión de Internet Server.

No podrá establecer puntos de interrupción en el código fuente de un componente hasta que el componente se ha cargado en la memoria. Para ello, inicie Internet Explorer y vista la.Página ASP que contiene el objeto. Tan pronto como se cargue la página, debe ser capaz de establecer puntos de interrupción en el componente. Haga clic en Actualizar para ver la página de nuevo y activar los puntos de interrupción que ha seleccionado. Si el componente no se puede cargar ni una sola vez (por ejemplo, si el error se produce en el código de inicio de componente), debe cargar la DLL del componente antes de iniciar la sesión de depuración. (Consulte el paso 11 infra).

En algunos casos, puede no ser capaz de utilizar cualquiera de los dos procedimientos descritos. Si tienes dificultades para utilizar cualquiera de estas estrategias, hay un tercer enfoque, que ha sido descrito en las versiones anteriores de IIS. Este tercer enfoque requiere el establecimiento de privilegios de seguridad de Windows NT, así como realizar cambios en el registro. También desactivará su capacidad para ejecutar IIS como un servicio. Este enfoque sólo debe utilizarse si han fallado las dos estrategias anteriores.

  1. Utilice el administrador de usuario para la herramienta de administración de dominios (USRMGR) para añadir el iniciar sesión como servicio, actuar como parte del sistema operativoy auditorías de seguridad de generar los derechos en el equipo local a la cuenta de Windows NT que se va a utilizar cuando la depuración de la DLL de extensión de Internet Server.

  2. Utilice la utilidad de configuración de COM distribuido (DCOMCNFG) para cambiar la identidad del servicio de administración de IIS para la cuenta de usuario que se va a utilizar para la depuración.

  3. Utilice el Editor del registro (REGEDIT) para quitar la palabra clave LocalService de todas las subclaves relacionadas IISADMIN bajo HKEY_CLASSES_ROOT/AppID. Esta palabra clave se puede encontrar en las siguientes subclaves:

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

    {9F0BD3A0-EC01-11D0-A6A0-00A0C922E752} / / extensión IIS Admin Crypto

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

    La palabra clave LocalService puede encontrarse en las subclaves adicionales de AppID.

  4. Añadir subclaves LocalServer32 a todas las subclaves relacionadas IISADMIN bajo el nodo CLSID del registro. Esto incluirá las subclaves correspondientes a todas las subclaves eliminado en el paso anterior. Conjunto el valor predeterminado de estas nuevas claves a lt; ruta > \inetinfo.exe -e w3svc. (<path> normalmente es "c:\winnt\system32\inetsrv").

  5. Detenga los servicios WWW y FTP desde la consola de administración de Microsoft, o desde el cuadro de diálogo de servicios en el Panel de Control.

  6. Inicie Visual C++ y seleccione la ficha Depurar en el cuadro de diálogo Ajustes del proyecto.

  7. Escriba la siguiente ruta en el campo de archivo ejecutable para la sesión de depuración:

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

  8. Escriba lo siguiente en el campo Argumentos de programa:

    w3svc -e

  9. Seleccione la ficha de vínculo en el cuadro de diálogo Ajustes del proyecto.

  10. Introduzca el nombre y la ruta de la DLL está depurando en el campo nombre de archivo de salida de la extensión de Internet Server.

  11. Opcionalmente, añadir el componente DLL a la lista de Archivos DLL adicionales que se cargan antes de que inicie la aplicación. Esto le permitirá establecer puntos de interrupción en el código de inicio de componente.

  12. Haga clic en el botón ir para iniciar la sesión de depuración.

&Notanbsp;  Después de haber completado la sesión de depuración, se deben revertir los pasos 5 a 1 para restaurar la configuración anterior y permitir que IIS para ejecutarse como un servicio.

&Notas técnicas por número |nbsp; Notas técnicas por categoría

Index