Compartilhar via


Facilitando uma imagem depurar

Ao compilar o código não gerenciado, você pode configurar uma imagem executável para depuração, opções de IDE de configuração ou opções de linha de comando. Por exemplo, você pode usar o /Zi a opção de linha de comando no Visual C++ pedir a ele para emitir os arquivos de símbolos de depuração (arquivo. PDB do extensão). Da mesma forma, o /Od a opção de linha de comando informa ao compilador para desativar a otimização. O código resultante é executado mais lentamente, mas é mais fácil de depurar, se isso for necessário.

Durante a compilação.NET Framework código gerenciado, compiladores como, por exemplo, Visual C++, Visual Basic, e C# compilar seu programa de origem em Microsoft Intermediate Language (MSIL). MSIL é subseqüentemente compilado em JIT, antes de execução, em código de máquina nativo. Como com código não gerenciado, você pode configurar uma imagem executável para depuração, opções de IDE de configuração ou opções de linha de comando. Além disso, você pode configurar a compilação JIT para depuração da mesma maneira.

Essa configuração de JIT tem dois aspectos:

  • Você pode solicitar que o compilador JIT para gerar informações de rastreamento. Isso possibilita que o depurador para corresponder a uma cadeia de MSIL com sua contraparte de código de máquina e para rastrear onde estão armazenados os argumentos de função e variáveis locais. No.NET Framework versão 2.0, o compilador JIT irá sempre gerar informações de rastreamento, portanto, não é preciso para solicitá-lo.

  • Você pode solicitar que o compilador JIT não otimizar o código resultante da máquina.

Normalmente, o compilador que gera o MSIL define essas opções do compilador JIT adequadamente, com base nas opções do IDE ou opções de linha de comando que você especificar, por exemplo, /Od.

Em alguns casos, convém alterar o comportamento do compilador JIT para que ele gera o código de máquina é mais fácil de depurar. Por exemplo, você talvez queira gerar informações de controle de uma compilação de varejo do JIT ou controlar a otimização. Você pode fazer isso com um arquivo de inicialização (. ini).

Por exemplo, se o assembly que você deseja depurar é chamado de MyApp. exe, você pode criar um arquivo de texto chamado MyApp.ini, na mesma pasta como Myapp. exe, que contém estas três linhas:

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0

Você pode definir o valor de cada opção para 0 ou 1 e qualquer opção ausente padrão é 0. Definindo GenerateTrackingInfo como 1 e AllowOptimize 0 fornece a depuração mais fácil.

Observação

No.NET Framework versão 2.0, o compilador JIT sempre gera informações de rastreamento, independentemente do valor de GenerateTrackingInfo; No entanto, o AllowOptimize valor ainda tem um efeito.Ao usar o NGen (Native Image Generator) para pré-compilar a imagem nativa sem otimização, o arquivo. ini deve estar na pasta de destino com AllowOptimze=0 quando executa o NGen. exe.Se você tem pré-compilado um assembly sem otimização, você deve remover o código pré-compilado usando o NGen. exe /uninstall opção antes de executar novamente o NGen. exe para pré-compilar o código como otimizado.Se o arquivo. ini não estiver presente na pasta, por padrão NGen. exe pré-compila o código como otimizado.

Observação

O System.Diagnostics.DebuggableAttribute controla as configurações para um assembly.DebuggableAttribute inclui dois campos, as configurações de registro para se o compilador JIT deve otimizar e/ou gerar informações de rastreamento.No.NET Framework versão 2.0, o compilador JIT irá sempre gerar informações de rastreamento.

Observação

Para uma compilação de varejo, compiladores não defina qualquer DebuggableAttribute.O comportamento padrão do compilador JIT é gerar o mais alto desempenho, mais difícil de depurar o código de máquina.A Ativação JIT controle reduz um pouco o desempenho e otimização desabilitando reduz muito o desempenho.

Observação

O DebuggableAttribute se aplica a um conjunto completo de cada vez, não para módulos individuais dentro do assembly.Ferramentas de desenvolvimento, portanto, devem anexar atributos personalizados para o token de metadados do assembly, se um assembly já foi criado, ou para a classe chamado System.Runtime.CompilerServices.AssemblyAttributesGoHere.A Ferramenta ALink então promover essas DebuggableAttribute atributos de cada módulo ao assembly que se tornem uma parte.Se houver um conflito, haverá falha na operação de ALink.

Observação

Na versão 1.0 da.NET Framework, o compilador de Microsoft Visual C++ adiciona o DebuggableAttribute quando o /clr e /Zi são especificadas opções de compilador.Na versão 1.1 do.NET Framework, você deve adicionar o DebugabbleAttribute manualmente no seu código ou o uso de /ASSEMBLYDEBUG a opção de vinculador.

Consulte também

Conceitos

Habilitar depuração anexar JIT

Permitindo a criação de perfil

Outros recursos

Depuração, rastreamento e criação de perfil