Compartilhar via


Diagnosticar erros com assistentes de depuração gerenciadas

Gerenciado assistentes de depuração (MDAs) estão depurando auxílio que funcionam em conjunto com o common linguagem runtime (CLR) para fornecer informações sobre o estado do tempo de execução.Os assistentes de geram mensagens informativas sobre eventos de tempo de execução caso contrário, você não pode interceptar.Você pode usar MDAs para isolar o aplicativo difíceis de encontrar bugs que ocorrem quando é feita a transição entre código gerenciado e.Você pode ativar ou desabilitar todos os MDAs, adicionar uma chave do registro do Windows ou definindo uma variável de ambiente.Você pode habilitar MDAs específicas usando configurações de configuração do aplicativo.Você pode conjunto configurações adicionais para algumas MDAs individuais no arquivo de configuração do aplicativo.Como esses arquivos de configuração são analisados quando o tempo de execução é carregado, você deve ativar o MDA antes do início do aplicativo gerenciado.Você não poderá ativá-la para aplicativos que já tenham sido iniciadas.

Observação:

Quando um MDA é enabled , Ele está ativo mesmo quando seu código não está em execução em um depurador .Se um MDA Evento é gerado Quando um depurador não está presente , a mensagem de evento é apresentada em uma caixa de diálogo de exceção sem tratamento, embora não seja uma exceção não tratada .Para evitar o caixa de diálogo , Remova o MDA - Ativar configurações quando seu código é não executando em um ambiente de depuração .

Observação:

Quando seu código está em execução no Visual Studio () ambiente de desenvolvimento integrado IDE ) , Você pode evitar a caixa de diálogo de exceção que são exibidos s para específico MDA eventos .Para isso, em o Depurar menu, clicar Exceções.(Se o Depurar menu não contém um Exceções de comando, clicar Personalizar on the Ferramentas menu para adicioná-lo.) No Exceções diálogo caixa, expandir o gerenciado Assistentes de depuração lista e, em seguida, desmarcar o Lançada a caixa de seleção para o MDA individual.Por exemplo, para evitar a caixa de diálogo de exceção para um contextSwitchDeadlock MDA desmarcar o Lançada caixa de seleção próximo ao seu nome no gerenciado Assistentes de depuração lista.Você também pode usar esta caixa de diálogo para habilitar MDAs.

A tabela a seguir lista os MDAs são fornecidos com o .NET estrutura.

asynchronousThreadAbort MDA

bindingFailure MDA

callbackOnCollectedDelegate MDA

contextSwitchDeadlock MDA

dangerousThreadingAPI MDA

dateTimeInvalidLocalFormat MDA

dirtyCastAndCallOnInterface MDA

disconnectedContext MDA

dllMainReturnsFalse MDA

exceptionSwallowedOnCallFromCom MDA

failedQI MDA

fatalExecutionEngineError MDA

gcManagedToUnmanaged MDA

gcUnmanagedToManaged MDA

illegalPrepareConstrainedRegion MDA

invalidApartmentStateChange MDA

invalidCERCall MDA

invalidFunctionPointerInDelegate MDA

invalidGCHandleCookie MDA

invalidIUnknown MDA

invalidMemberDeclaration MDA

invalidOverlappedToPinvoke MDA

invalidVariant MDA

jitCompilationStart MDA

loaderLock MDA

loadFromContext MDA

marshalCleanupError MDA

marshaling MDA

memberInfoCacheCreation MDA

moduloObjectHashcode MDA

nonComVisibleBaseClass MDA

notMarshalable MDA

openGenericCERCall MDA

overlappedFreeError MDA

pInvokeLog MDA

pInvokeStackImbalance MDA

raceOnRCWCleanup MDA

reentrância MDA

releaseHandleFailed MDA

reportAvOnComRelease MDA

streamWriterBufferedDataLost MDA

virtualCERCall MDA

Por padrão, o .NET estrutura ativa um subconjunto de MDAs para todos os depuradores gerenciado.Você pode exibir o padrão definido no Visual Studio, clicando em Exceções on the Depurar menu e expandindo o Assistentes de depuração gerenciada lista.

Habilitando e desabilitando MDAs

Você pode habilitar e desabilitar MDAs usando uma chave do registro, uma variável de ambiente e aplicativo configuração configurações.Você deve habilitar a chave do registro ou a variável de ambiente para usar as configurações do aplicativo.

No Visual Studio 2005 e versões posteriores, quando o processo de hospedagem está ativado, não é possível desabilitar MDAs que estão no conjunto padrão ou habilitar MDAs não no padrão definidas.O processo de hospedagem está habilitado por padrão, portanto, ele deve ser explicitamente desabilitado.

Para desabilitar o processo de hospedagem no Visual Studio, faça o seguinte:

  1. Em Solution Explorer, selecione um projeto.

  2. No menu Project, clique em Properties..

    The Designer de projeto janela é exibida.

  3. Clique na guia Debug.

  4. No Ativar depuradores seção, desmarcar o Ativar o processo de hospedagem do Visual Studio a caixa de seleção.

Entretanto, desabilitar o processo de hospedagem pode afetar o desempenho.Você pode evitar a necessidade de desabilitar MDAs, impedindo que o Visual Studio exibindo a caixa de diálogo MDA sempre que uma notificação MDA é recebida.Para isso, clicar Exceções on the Depurar menu, expandir o Assistentes de depuração gerenciada lista e, em seguida, marque ou desmarcar o Lançada a caixa de seleção para o MDA individual.

Habilitando e desabilitando por meio de uma chave do registro

Você pode ativar MDAs, adicionando a subchave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA no registro do Windows.Copie o exemplo a seguir para um arquivo de texto chamado "MDAEnable.reg":

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

De um aviso de comando, executar o arquivo MDAEnable.reg ativar MDAs no computador.Para desabilitar MDAs, copie o exemplo a seguir para um arquivo de texto chamado "MDADisable.reg":

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

Em seguida, execute o arquivo MDADisable.reg em um aviso de comando.

Por padrão, alguns MDAs são habilitadas quando a execução do aplicativo anexado a um depurador, mesmo sem adicionar o chave do Registro.Exemplos de tais assistentes são pInvokeStackImbalance MDA e invalidApartmentStateChange MDA. Você pode desabilitar esses sistants sistema autônomo executando o arquivo MDADisable.reg sistema autônomo descrito acima.

Habilitando e desabilitando por meio de uma variável de ambiente

Ativação MDA também pode controlado pela variável de ambiente COMPLUS_MDA.A variável de ambiente substitui a chave do registro.A seqüência de caracteres é um maiúsculas de minúsculas, delimitada por ponto-e-vírgula lista de nomes MDA ou outras seqüências de caracteres de controle especial.Iniciando em um depurador gerenciado ou permite que um conjunto de MDAs por padrão.Isso é concluído por implicitamente anexando ao início da lista delimitada por ponto-e-vírgula de MDAs habilitado por padrão em depuradores ao valor da variável de ambiente ou chave do Registro.As seqüências de caracteres de controle especiais são:

  • 0 -Desativa todos os MDAs.

  • 1 -Lê MDA configurações de ApplicationName. mda.config.

  • managedDebugger -Ativa explicitamente todos os MDAs são ativadas implicitamente quando um executável gerenciado é iniciado em um depurador.

  • unmanagedDebugger -Ativa explicitamente todos os MDAs são ativadas implicitamente quando um executável não gerenciado é iniciado em um depurador.

Se houver configurações conflitantes, as configurações mais recentes substituirão as configurações anteriores:

  • COMPLUS_MDA=0 Desativa todos os MDAs, inclusive aqueles ativada implicitamente em um depurador.

  • COMPLUS_MDA=gcUnmanagedToManaged permite gcUnmanagedToManaged em conjunto com quaisquer ativada implicitamente em um depurador.

  • COMPLUS_MDA =0;gcUnmanagedToManaged permite gcUnmanagedToManaged mas desabilita esses MDAs caso contrário, devem ser ativadas implicitamente em um depurador.

Habilitando e desabilitando por meio de configurações específicas do aplicativo

Você pode ativar, desabilitar e configurar alguns assistentes individualmente no arquivo de configuração MDA para o aplicativo.Para ativar o uso de um arquivo de configuração do aplicativo de configuração MDAs, tanto a chave de registro MDA ou a variável de ambiente COMPLUS_MDA deve ser definida.O arquivo de configuração do aplicativo normalmente está localizado na mesma pasta que o arquivo executável do aplicativo (.exe).O nome de arquivo leva o formulário ApplicationName. mda.config; por exemplo, notepad.exe.mda.config.Assistentes ativados no arquivo de configuração do aplicativo podem ter atributos ou elementos projetados especificamente para controlar o comportamento desse assistente.O exemplo a seguir mostra como habilitar e configurar o marshaling MDA.

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

Estas configurações ativam e configurar o Marshaling MDA emite informações descrevendo o tipo gerenciado que está sendo empacotado para um tipo não gerenciado para cada transição não gerenciado para gerenciado no aplicativo. The Marshaling MDA tem mais flexibilidade para filtrar o nome do método e campos de estrutura fornecida com o <methodFilter> e <fieldFilter> elementos filho, respectivamente.

Para obter mais informações sobre configurações específicas de cada MDA individual, consulte a documentação para que o MDA.

MDA saída

Saída MDA é semelhante ao exemplo a seguir, que mostra a saída do pInvokeStackImbalance MDA.

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.

Consulte também

Outros recursos

Depuração e perfil de aplicativos

Date

History

Motivo

Julho de 2008

Observação sobre como evitar a mensagem ContextSwitchDeadlock adicionada.

Comentários do cliente.