Depurar usando o Depurador Just-In-Time no Visual Studio
A depuração Just-In-Time pode iniciar o Visual Studio automaticamente quando um aplicativo em execução fora do Visual Studio falha ou trava. Com a depuração Just-In-Time, você pode testar aplicativos fora do Visual Studio e abrir o Visual Studio para iniciar a depuração quando um problema ocorrer.
A depuração Just-In-Time funciona para aplicativos da área de trabalho do Windows. Ele não funciona com aplicativos universais do Windows ou com o código gerenciado hospedado em um aplicativo nativo, como Visualizadores.
Dica
Se você quiser apenas impedir que a caixa de diálogo do Depurador Just-In-Time apareça, mas não tiver o Visual Studio instalado, consulte Desabilitar o Depurador Just-In-Time. Se você tinha o Visual Studio instalado, talvez precise desabilitar a depuração Just-In-Time do Registro do Windows.
Habilitar ou desabilitar a depuração Just-In-Time no Visual Studio
Você pode configurar a depuração Just-In-Time na caixa de diálogo Ferramentas>Opções (ou Depurar>Opções) do Visual Studio.
Observação
Para habilitar ou desabilitar a depuração Just-In-Time, você precisa estar executando o Visual Studio como administrador. Habilitar ou desabilitar a depuração Just-In-Time define uma chave do Registro, e privilégios de Administrador podem ser necessários para alterar essa chave. Para abrir o Visual Studio como administrador, clique com o botão direito do mouse no aplicativo Visual Studio e escolha Executar como administrador.
Para habilitar ou desabilitar a depuração Just-In-Time:
No menu Ferramentas ou Depurar, selecione Opções>Depuração>Just-In-Time.
Observação
Se a opção de menu Just-In-Time não for exibida, verifique se o depurador Just-In-Time está instalado usando o Instalador do Visual Studio.
Na caixa Habilitar a depuração Just-In-Time para esses tipos de código, selecione os tipos de código que deseja que a depuração Just-In-Time depure: Gerenciado, Nativo e/ou Script.
Selecione OK.
Se você habilitar o depurador Just-In-Time, mas ele não abrir quando um aplicativo falhar ou travar, consulte Solucionar problemas da depuração Just-In-Time.
Desabilitar a depuração Just-In-Time do Registro do Windows
A depuração Just-In-Time ainda pode estar habilitada mesmo que o Visual Studio não esteja mais instalado no seu computador. Se o Visual Studio não estiver mais instalado, você poderá desabilitar a depuração Just-In-Time editando o Registro do Windows.
Para desabilitar a depuração Just-In-Time editando o Registro:
No menu Iniciar do Windows, execute o Editor do Registro (regedit.exe).
Na janela Editor do Registro, localize e exclua as seguintes entradas do Registro se elas existirem:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Exclua também as seguintes entradas do Registro se elas existirem:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Tenha cuidado para não excluir nem alterar acidentalmente outras chaves do Registro.
Feche a janela Editor do Registro.
Habilitar a depuração Just-In-Time de um formulário do Windows
Por padrão, aplicativos Windows Forms têm um manipulador de exceção de nível superior que permite que o aplicativo continue em execução se ele puder se recuperar. Se um aplicativo Windows Forms gerar uma exceção sem tratamento, ele mostrará a seguinte caixa de diálogo:
Para habilitar a depuração Just-In-Time em vez do tratamento de erros padrão do Windows Forms, adicione estas configurações:
Na seção
system.windows.forms
do arquivo machine.config ou <nome do aplicativo>.exe.config, defina o valor dejitDebugging
comotrue
:<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
No aplicativo C++ do Windows Forms, defina
DebuggableAttribute
comotrue
em um arquivo .config ou no seu código. Se você compilar com /Zi e sem /Og, o compilador definirá esse atributo para você. Entretanto, se você desejar depurar uma versão não otimizada, deverá definirDebuggableAttribute
adicionando a seguinte linha no arquivo AssemblyInfo.cpp do seu aplicativo:[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
Para obter mais informações, consulte DebuggableAttribute.
Usar a depuração Just-In-Time
Este exemplo descreve a depuração Just-In-Time quando um aplicativo gera um erro.
Você precisa ter o Visual Studio instalado para seguir estas etapas. Se você não tem o Visual Studio, pode baixar a Edição Visual Studio Community gratuitamente.
Verifique se a depuração Just-In-Time está habilitada em Ferramentas>Opções>Depuração>Just-In-Time.
Neste exemplo, você deve fazer um aplicativo de console C# no Visual Studio que gere uma NullReferenceException.
No Visual Studio, crie um aplicativo de console C# (Arquivo>Novo>Projeto>Visual C#>Aplicativo de Console) chamado ThrowsNullException. Para obter mais informações sobre como criar projetos no Visual Studio, consulte instruções passo a passo: criar um aplicativo simples.
Quando o projeto for aberto no Visual Studio, abra o arquivo Program.cs. Substitua o método Main() pelo código a seguir, que imprime uma linha no console e, em seguida, gera uma NullReferenceException:
static void Main(string[] args) { Console.WriteLine("we will now throw a NullReferenceException"); throw new NullReferenceException("this is the exception thrown by the console app"); }
Para compilar a solução, escolha a configuração Depuração (padrão) ou Versão e, em seguida, selecione Compilar>Recompilar Solução.
Observação
- Escolha a configuração de Depuração para a experiência completa de depuração.
- Se você selecionar a configuração de Versão, precisará desativar Apenas Meu Código para que este procedimento funcione. Em Ferramentas>Opções>Depuração, desmarque Habilitar Apenas Meu Código.
Para saber mais sobre configurações de build, veja Noções básicas sobre configurações de build.
Abra o aplicativo compilado ThrowsNullException.exe na pasta do projeto C# (...\ThrowsNullException\ThrowsNullException\bin\Debug ou ...\ThrowsNullException\ThrowsNullException\bin\Release).
Você verá a seguinte janela de comando:
A caixa de diálogo Escolher Depurador Just-In-Time é aberta.
Em Depuradores Disponíveis, selecione Nova instância de< sua versão/edição preferida do Visual Studio>, se ainda não estiver selecionada.
Selecione OK.
O projeto ThrowsNullException é aberto em uma nova instância do Visual Studio, com a execução interrompida na linha que gerou a exceção:
Você pode iniciar a depuração neste ponto. Se você estiver depurando um aplicativo real, precisará encontrar o motivo pelo qual o código está gerando a exceção.
Cuidado
Se o aplicativo contiver código não confiável, uma caixa de diálogo de aviso de segurança será exibida, permitindo que você decida se deseja continuar com a depuração. Antes de prosseguir com a depuração, decida se você confia no código. Você mesmo escreveu o código? Se o aplicativo está sendo executado em um computador remoto, você reconhece o nome do processo? Se o aplicativo estiver em execução localmente, considere a possibilidade de haver código mal-intencionado em execução no computador. você decidir que o código é confiável, selecione OK. Caso contrário, selecione Cancelar.
Solucionar problemas de depuração Just-In-Time
Se a depuração Just-In-Time não for iniciada quando um aplicativo falhar, mesmo que esteja habilitado no Visual Studio:
Um problema conhecido do Windows pode estar fazendo com que o depurador Just-In-Time falhe.
A correção é adicionar um Valor DWORD de Automático, com Dados do valor de 1, às seguintes chaves do Registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(Para aplicativos de 32 bits em máquinas de 64 bits) HKEY_LOCAL_MACHINE \ Software \ WOW6432Node \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug
O Relatório de Erros do Windows pode estar assumindo o tratamento de erros em seu computador.
Para corrigir esse problema, use o Editor do Registro para adicionar um Valor DWORD de Desabilitado, com Dados do valor de 1, às seguintes chaves do Registro:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(Para aplicativos de 32 bits em máquinas de 64 bits) HKEY_LOCAL_MACHINE \ Software \ WOW6432Node \ Microsoft \ Windows \ Relatório de erros do Windows
Para obter mais informações, confira Configurações de .WER.
Você pode ver as seguintes mensagens de erro durante a depuração Just-In-Time:
Não é possível se anexar ao processo de travamento. O programa especificado não é um programa do Windows ou do MS-DOS.
O depurador tentou anexar a um processo em execução em outro usuário.
Para solucionar esse problema, no Visual Studio, abra Depurar>Anexar ao Processo (ou pressione Ctrl + Alt + P) e localize o processo que você deseja depurar na lista Processos Disponíveis. Se você não souber o nome do processo, encontre a ID do processo na caixa de diálogo do Depurador Just-In-Time do Visual Studio.. Selecione o processo na lista Processos Disponíveis e selecione Anexar. Selecione Não para ignorar a caixa de diálogo Depurador Just-In-Time.
Não foi possível iniciar o depurador porque não há usuário conectado.
Não há nenhum usuário conectado ao console, portanto não existe nenhuma sessão de usuário para exibir a caixa de diálogo de depuração Just-In-Time.
Para corrigir esse problema, conecte-se ao computador.
Classe não registrada.
O depurador tentou criar uma classe COM que não está registrada, provavelmente devido a um problema de instalação.
Para corrigir o problema, use o Instalador do Visual Studio para reinstalar ou reparar sua instalação do Visual Studio.
Conteúdo relacionado
- Segurança do depurador
- Introdução ao depurador
- Caixa de diálogo Opções, Depuração, Just-In-Time
- Aviso de segurança: A anexação a um processo pertencente a um usuário não confiável pode ser perigosa. Se as informações a seguir parecerem suspeitas ou se você não tiver certeza, não anexe a esse processo