Facilitando uma imagem para depurar
Durante a compilação de código não gerenciado, você pode configurar uma imagem executável para depuração pela configuração de IDE switches ou opções de linha de comando.Por exemplo, você pode usar o / Zi opção de linha de comando no Visual C++ para pedir para emitir os arquivos de símbolos de depurar (arquivo de extensão .pdb).Da mesma forma, o / Odopção de linha de comando informa ao compilador para desabilitar a otimização.O código resultante é executado mais lentamente, mas é mais fácil depurar, se isso for necessário.
Quando compilar o .NET estrutura código gerenciado, compiladores, sistema autônomo Visual C++, Visual Basic e translation from VPE for Csharp compilar seu programa de fonte no Microsoft Intermediate linguagem (MSIL).MSIL é subseqüentemente compilado em JIT, antes de execução, em código de computador nativo.sistema autônomo com código não gerenciado, você pode configurar uma imagem executável para depuração pela configuração de IDE switches 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 solicitação o compilador JIT para gerar informações de acompanhamento.Isso torna possível para o depurador para comparar uma cadeia de MSIL com sua contraparte do código de computador e para rastrear onde variáveis locais e os argumentos de função estão armazenados.No .NET estrutura versão 2.0, o compilador JIT será sempre gerar acompanhamento de informações, portanto, é necessário para solicitá-lo.
Você pode solicitar o compilador JIT para otimizar o código resultante de computador não.
Normalmente, o compilador gerará MSIL define essas opções do compilador JIT apropriadamente, com base nas opções do IDE ou opções da linha de comando que você especificar, por exemplo, / Od.
Em alguns casos, convém alterar o comportamento do compilador JIT para que seja mais fácil depurar o código de computador gera.Por exemplo, convém para gerar informações de acompanhamento de uma compilação para venda JIT ou controlar a otimização.Você pode fazê-lo com um arquivo de inicialização (. ini).
Por exemplo, se o assembly que você deseja depurar for chamado MyApp.exe, você pode criar um arquivo de texto chamado MyApp.ini na mesma pasta sistema autônomo MyApp.exe, que contém estas três linhas:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
Você pode conjunto o valor de cada opção para 0 ou 1 e qualquer opção ausente padrão é 0.Definir GenerateTrackingInfo a 1 e AllowOptimize 0 fornece a depuração mais fácil.
Observação: |
---|
No .NET estrutura versão 2.0, o compilador JIT sempre gera informações de acompanhamento independentemente do valor para GenerateTrackingInfo; No entanto, o AllowOptimize valor ainda tem efeito. Ao usar o Nativo Gerador de Imagem (Ngen.exe) para pré-compilar a imagem nativa sem otimização, o arquivo .ini deve estar presente na pasta de destino com AllowOptimze=0 Quando executa NGen.exe. Se tiver pré-compilado um conjunto sem otimização, você deve remover o código de pré-compilado usando o NGen.exe /uninstall opção antes de executar novamente NGen.exe pré-compile o código sistema autônomo otimizado. Se o arquivo .ini não estiver presente na pasta, por padrão NGen.exe precompila o código sistema autônomo otimizado. |
Observação: |
---|
O System.Diagnostics.DebuggableAttribute Controla as configurações para um assembly. DebuggableAttribute inclui dois campos que registra as configurações para se o compilador JIT deve otimizar e/ou gerar informações de acompanhamento.O .NET estrutura versão 2.0, o compilador JIT gerará sempre informações de acompanhamento. |
Observação: |
---|
Para uma compilação de varejo, compiladores não defina qualquer uma DebuggableAttribute.O comportamento padrão do compilador JIT é gerar o mais alto desempenho, mais difícil depurar o código de computador.Ativação JIT acompanhamento reduz um pouco o desempenho e otimização desabilitação reduz o desempenho muito. |
Observação: |
---|
O DebuggableAttribute aplica a um conjunto inteiro por vez, não para módulos individuais dentro do assembly.Ferramentas de desenvolvimento, portanto, devem anexar atributos personalizados ao token de metadados do assembly, se um assembly já tiver sido criado ou a classe chamada sistema.tempo de execução.CompilerServices.AssemblyAttributesGoHere.A Ferramenta ALink promoverá, em seguida, esses DebuggableAttribute atributos de cada módulo ao conjunto de módulos (assembly) ficam parte.Se houver um conflito, haverá falha na operação ALink. |
Observação: |
---|
Na versão 1.0 das .NET Estrutura, o Microsoft O Visual C ++ compilador adiciona o DebuggableAttribute when the / CLR and Zi opções do compilador são especificadas.Na versão 1.1 do .NET estrutura, ou você deve adicionar o DebugabbleAttribute manualmente no seu código ou use o / ASSEMBLYDEBUG opção de vinculador . |
Habilitar depuração anexar JIT