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.
Nota |
---|
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
Conceptos
Diagnóstico de errores con ayudantes de depuraciones administradas
Cálculo de referencias de interoperabilidad