Evaluar y enviar comentarios
Esta página es específica de
Microsoft Visual Studio 2005/.NET Framework 2.0

Hay además otras versiones disponibles para:
Manual del programador de .NET Framework
Diagnóstico de errores con ayudantes de depuraciones administradas

Los asistentes de depuración administrada (MDA) son ayudas para la depuración que funcionan en conjunción con Common Language Runtime (CLR) para proporcionar información sobre estado en tiempo de ejecución. Los asistentes generan mensajes informativos sobre eventos en tiempo de ejecución que de otra forma no pueden interceptar. Puede utilizar MDA para aislar errores de la aplicación difíciles de encontrar que aparecen al realizar la transición entre código administrado y no administrado. Puede habilitar o deshabilitar todos los MDA si agrega una clave al Registro de Windows o establece una variable de entorno. Puede habilitar MDA específicos mediante los valores de configuración de la aplicación. Puede establecer opciones de configuración adicionales para algunos MDA concretos en el archivo de configuración de la aplicación. Dado que estos archivos de configuración se analizan cuando se carga el motor en tiempo de ejecución, debe habilitar el MDA antes de que se inicie la aplicación administrada. No puede habilitarlo para aplicaciones que ya se han iniciado.

La tabla siguiente muestra los MDA incluidos con .NET Framework.

Habilitar y deshabilitar MDA

Puede habilitar y deshabilitar los MDA mediante una clave del Registro, una variable de entorno o valores de configuración de la aplicación. La clave del Registro o la variable de entorno tienen que estar habilitadas para utilizar los valores de configuración de la aplicación.

Habilitar y deshabilitar utilizando una clave del Registro

Puede habilitar MDA agregando la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA al Registro de Windows. Copie el ejemplo siguiente en un archivo de texto denominado "MDAEnable.reg":

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"

En el símbolo del sistema, ejecute el archivo MDAEnable.reg para habilitar los MDA en el equipo. Para deshabilitar los MDA, copie el ejemplo siguiente en un archivo de texto denominado "MDADisable.reg":

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="0"

A continuación, ejecute el archivo MDADisable.reg desde el símbolo del sistema.

De forma predeterminada, los MDA están habilitados al ejecutar la aplicación adjunta a un depurador, incluso sin agregar la clave del Registro. Ejemplos de estos asistentes son PInvokeStackImbalance e InvalidApartmentStateChange. Puede deshabilitar estos asistentes ejecutando el archivo MDADisable.reg como se explicó anteriormente.

Habilitar y deshabilitar utilizado una variable de entorno

La activación de MDA también puede controlarse mediante la variable de entorno COMPLUS_MDA. La variable de entorno reemplaza la clave del Registro. La cadena es una lista de nombres de MDA delimitada por puntos y comas u otras cadenas de control especiales, y no distingue entre mayúsculas y minúsculas. Al iniciar bajo un depurador administrado o no administrado se habilita de forma predeterminada un conjunto de MDA. Esto se hace anteponiendo implícitamente la lista de MDA delimitada por puntos y comas habilitada de manera predeterminada bajo depuradores según el valor de la variable de entorno o de la clave del Registro. Las cadenas de control especiales son las siguientes:

  • 0 - Desactiva todos los MDA.

  • 1: lee la configuración de MDA de Nombre de aplicación.mda.config.

  • managedDebugger - Activa explícitamente todos los MDA que se activan implícitamente cuando se inicia un ejecutable administrado bajo un depurador.

  • unmanagedDebugger - Activa explícitamente todos los MDA que se activan implícitamente cuando se inicia un ejecutable no administrado bajo un depurador.

Si hay ajustes contradictorios, los más recientes reemplazan los ajustes anteriores:

  • COMPLUS_MDA=0 deshabilita todos los MDA que incluyen aquellos habilitados implícitamente bajo un depurador.

  • COMPLUS_MDA=gcUnmanagedToManaged habilita gcUnmanagedToManaged implícitamente además de cualquier otro habilitado implícitamente bajo un depurador.

  • COMPLUS_MDA =0;gcUnmanagedToManaged habilita gcUnmanagedToManaged pero deshabilita esos MDA que de lo contrario estarían habilitados implícitamente bajo un depurador.

Habilitar y deshabilitar utilizando ajustes de configuración específicos de la aplicación

Puede habilitar, deshabilitar y configurar individualmente algunos asistentes en el archivo de configuración de MDA para la aplicación. Para habilitar el uso de un archivo de configuración de la aplicación para configurar los MDA, es necesario establecer la clave del Registro MDA o la variable de entorno COMPLUS_MDA. El archivo de configuración de la aplicación se encuentra normalmente en el mismo directorio que el archivo ejecutable de la aplicación (.exe). El nombre del archivo toma la forma Nombre de aplicación.mda.config; por ejemplo, notepad.exe.mda.config. Los asistentes habilitados en el archivo de configuración de la aplicación pueden tener atributos o elementos específicamente diseñados para controlar el comportamiento de ese asistente. El ejemplo siguiente muestra cómo habilitar y configurar el MDA de cálculo de referencias.

<mdaConfig>
  <assistants>
    <marshaling>
      <methodFilter>
        <match name="*"/>
      </methodFilter>
      <fieldFilter>
        <match name="*"/>
      </fieldFilter>
    </marshaling>
  </assistants>
</mdaConfig>

Estos ajustes habilitan y configuran el MDA Marshaling, que emite información que describe el tipo administrado que se está convirtiendo en un tipo no administrado para todas las transiciones de administrado a no administrado que tienen lugar en la aplicación. El MDA Marshaling tiene mayor flexibilidad para filtrar los campos del nombre del método y la estructura proporcionados en los elementos secundarios <methodFilter> y <fieldFilter>, respectivamente.

Para obtener más información sobre la configuración específica de cada MDA concreto, consulte la documentación de ese MDA.

Resultados del MDA

El resultado del MDA es similar al ejemplo siguiente, que muestra el resultado del MDA pInvokeStackImbalance.

A call to PInvoke function 'MDATest!MDATest.Program::StdCall' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Vea también

Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2012 Microsoft. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker