Compartir a través de


MDA de contextSwitchDeadlock

El asistente para la depuración administrada (MDA) de contextSwitchDeadlock se activa cuando se detecta un interbloqueo durante la transición del contexto COM.

Síntomas

El síntoma más común consiste en que una llamada realizada en un componente COM no administrado por parte de código administrado no vuelve. Otro síntoma es una mayor utilización de la memoria de forma progresiva.

Motivo

La causa más probable es que un subproceso del apartamento de un único subproceso (STA) no está proporcionando mensajes. El subproceso STA o está esperando sin proporcionar mensajes o está realizando operaciones largas y no está permitiendo que la cola de mensajes siga su curso normal.

La mayor utilización de la memoria se debe al subproceso del finalizador que está intentando realizar una llamada a Release en un componente COM no administrado y a que dicho componente no está siendo devuelto. Esto evita que el finalizador reclame otros objetos.

De forma predeterminada, el modelo de subprocesos para el subproceso principal de las aplicaciones de consola de Visual Basic es STA. Se activa este asistente para la depuración administrada si un subproceso STA utiliza directa o indirectamente la interoperabilidad COM a través de Common Language Runtime o un control de otro fabricante. Para evitar su activación en una aplicación de consola de Visual Basic, aplique el atributo MTAThreadAttribute al método principal o modifique la aplicación para que proporcione mensajes.

Es posible que este asistente se active falsamente cuando se cumplen todas las condiciones siguientes:

  • Una aplicación crea componentes COM a partir de subprocesos STA, ya sea directa o indirectamente a través de bibliotecas.

  • La aplicación se detuvo en el depurador y el usuario continuó la aplicación o realizó una operación paso a paso.

  • No está habilitada la depuración no administrada.

Para determinar si el asistente para la depuración administrada se activa falsamente, deshabilite todos los puntos de interrupción, reinicie la aplicación y permita que se ejecute sin detenerse. Si no se activa el asistente para la depuración administrada, es probable la activación inicial fuese falsa. En este caso, deshabilite el asistente para la depuración administrada para evitar interferencias con la sesión de depuración.

NotaNota

Este asistente para la depuración administrada se encuentra en el conjunto predeterminado de Visual Studio 2005 y en versiones posteriores.Cuando el proceso de hospedaje está habilitado en Visual Studio, no se pueden deshabilitar los asistentes para la depuración administrada que se encuentran en el conjunto predeterminado.De forma predeterminada, el proceso de hospedaje está habilitado, por lo que debe deshabilitarse explícitamente.Para obtener información sobre cómo se deshabilitan los asistentes para la depuración administrada (MDA), vea "Habilitar y deshabilitar MDA" en Diagnóstico de errores con ayudantes de depuraciones administradas.

Resolución

Siga las reglas COM relacionadas con la distribución de mensajes STA.

Efecto en tiempo de ejecución

Este MDA no tiene ningún efecto en el CLR. Sólo comunica datos sobre contextos COM.

Output

Mensaje que describe el contexto actual y el contexto de destino.

Configuración

<mdaConfig>
  <assistants>
    <contextSwitchDeadlock enable="false" />
  </assistants>
</mdaConfig>

Vea también

Referencia

MarshalAsAttribute

Conceptos

Diagnóstico de errores con ayudantes de depuraciones administradas

Cálculo de referencias de interoperabilidad

Otros recursos

Interoperabilidad