Partilhar via


contextSwitchDeadlock MDA

The contextSwitchDeadlock gerenciado Assistente de depuração (MDA) é ativado quando um deadlock é detectado durante uma transição de contexto COM tentada.

Sintomas

O sintoma mais comum é que não retorna uma telefonar em um componente COM não gerenciado a partir de código gerenciado.Outro sintoma é o uso de memória aumentando, ao longo do time.

Causa

A causa mais provável é que um single-threaded apartment (STA) thread não é bombeando mensagens.O thread STA é espera sem bombeamento mensagem s ou está executando operações demoradas e não está permitindo o mensagem fila a bomba.

Uso de Memória aumenta com o time é causado pelo finalizador thread tentar telefonar Release em um não gerenciado COM esse componente e não está retornando. Isso impede que o finalizador recuperar outros objetos.

Por padrão, o modelo de threading para o segmento principal de aplicativos de console do Visual Basic é STA.Este MDA será ativado se um thread STA usa interoperabilidade COM direta ou indiretamente por meio do common linguagem tempo de execução ou um controle de terceiros.Para evitar ativar este MDA em um aplicativo de console do Visual Basic, aplique o MTAThreadAttribute atributo para o método principal ou modificar o aplicativo a bomba de mensagens.

É possível que este MDA erroneamente ser ativado quando todas as seguintes condições forem atendidas:

  • Um aplicativo cria componentes COM de threads STA direta ou indiretamente por meio de bibliotecas.

  • O aplicativo foi interrompido no depurador e o usuário continua o aplicativo ou executou uma operação de etapa.

  • Depuração não gerenciada não está habilitado.

Para determinar se o MDA está sendo ativado erroneamente, desabilitar todos os pontos de interrupção, reinicie o aplicativo e que ele seja executado sem interrupção.Se o MDA não for ativado, provavelmente que a ativação inicial foi falsa.Nesse caso, desative o MDA para evitar interferência com a sessão de depuração.

Observação:

Este MDA é no padrão conjunto para Visual Studio 2005 e versões posteriores. Quando o processo de hospedagem está ativado no Visual Studio, não é possível desabilitar MDAs no padrão definidas. O processo de hospedagem está habilitado por padrão, portanto, ele deve ser explicitamente desabilitado.Para obter informações sobre como desabilitar MDAs, consulte "Ativando e desativando MDAs"Diagnosticar erros com assistentes de depuração gerenciadas.

Resolução

Seguem as regras COM respeito bombeamento de mensagens STA.

Efeito sobre o tempo de execução

Este MDA não tem efeito sobre o CLR.Ele apenas relata dados sobre COM contextos.

Saída

Uma mensagem descrevendo o contexto corrente e o contexto de destino.

Configuração

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

Consulte também

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas

Visão geral do empacotamento interop

Referência

MarshalAsAttribute

Outros recursos

Interoperabilidade