AVISO A documentação do
MSDN para a opção / debug (no Visual Studio é Debug Info) parece estar desatualizada! Isto é o que está incorreto
Se você usar / debug: full , esteja ciente de que há algum impacto na velocidade e no tamanho do código JIT otimizado e um pequeno impacto na qualidade do código com / debug: full . Recomendamos / debug: pdbonly ou nenhum PDB para gerar o código de lançamento.
Uma diferença entre / debug: pdbonly e / debug: full é que com / debug: full o compilador emite um DebuggableAttribute
, que é usado para informar ao compilador JIT que as informações de depuração estão disponíveis.
Então, o que é verdade agora?
- Somente PDB - antes do .NET 2.0, ajudava a investigar os despejos de memória do produto lançado (máquinas do cliente). Mas não deixou anexar o depurador. Este não é o caso do .NET 2.0. É exatamente igual a Full .
- Completo - Isso nos ajuda a investigar despejos de memória e também nos permite anexar o depurador ao lançamento do build. Mas, ao contrário das menções do MSDN, não afeta o desempenho (desde o .NET 2.0). Ele faz exatamente o mesmo que somente Pdb .
Se eles são exatamente iguais, por que temos essas opções? John Robbins (deus da depuração do Windows) descobriu que eles existem por razões históricas.
No .NET 1.0 havia diferenças, mas no .NET 2.0 não. Parece que o .NET 4.0 seguirá o mesmo padrão. Depois de verificar duas vezes com a Equipe de depuração CLR, não há diferença alguma.
O que controla se o JITter faz uma compilação de depuração é a opção / Optimize. <…>
O resultado final é que você deseja construir suas versões de lançamento com / optimize + e qualquer uma das opções / debug para que possa depurar com o código-fonte.
então ele passa a provar isso.
Agora, a otimização faz parte de um switch separado /optimize
(no Visual Studio é chamado Optimize code
).
Em suma, independentemente de DebugInfo definir somente pdb ou full, teremos os mesmos resultados. A recomendação é evitar Nenhum, pois isso privaria você de ser capaz de analisar os despejos de memória do produto lançado ou anexar o depurador.