No Visual Studio 2010 para um projeto C #, se você for para Propriedades do projeto> Compilar> Avançado> Informações de depuração, terá três opções: nenhum, completo ou somente pdb. Com base na resposta a esta pergunta , acredito que entendo algumas das diferenças entre full e PDB somente. No entanto, o que é mais apropriado para uma versão de lançamento? Se eu usar "full", haverá ramificações de desempenho? Se eu usar "somente PDB", será mais difícil depurar problemas de produção?
Qual é a diferença entre "full" e "pdbonly"? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option
c#
visual-studio
debugging
build
debug-symbols
RationalGeek
fonte
fonte
Respostas:
Eu construiria com
pdb-only
. Você não poderá anexar um depurador ao produto lançado, mas se obtiver um despejo de memória , você pode usar o Visual Studio ou WinDBG para examinar os rastreamentos de pilha e despejos de memória no momento da falha.Se você escolher com, em
full
vez depdb-only
, obterá os mesmos benefícios, exceto que o executável pode ser anexado diretamente a um depurador. Você precisará determinar se isso é razoável, dados seus produtos e clientes.Certifique-se de salvar os arquivos PDB em algum lugar para que possa referenciá-los quando um relatório de travamento chegar. Se você puder configurar um servidor de símbolos para armazenar esses símbolos de depuração, tanto melhor.
Se você optar por construir com
none
, você não terá nenhum recurso quando houver uma falha no campo. Você não poderá fazer nenhum tipo de exame após o fato do acidente, o que pode prejudicar seriamente sua capacidade de rastrear o problema.Uma nota sobre o desempenho:
Tanto John Robbins quanto Eric Lippert escreveram postagens de blog sobre a
/debug
bandeira e ambos indicam que essa configuração tem impacto zero no desempenho . Há um/optimize
sinalizador separado que determina se o compilador deve realizar otimizações.fonte
If you use /debug:full, be aware that there is some impact on the speed and size of JIT optimized code and a small impact on code quality with /debug:full. We recommend /debug:pdbonly or no PDB for generating release code.
AVISO A documentação do MSDN para a opção / debug (no Visual Studio é Debug Info) parece estar desatualizada! Isto é o que está incorreto
Então, o que é verdade agora?
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.
então ele passa a provar isso.
Agora, a otimização faz parte de um switch separado
/optimize
(no Visual Studio é chamadoOptimize 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.
fonte
Release
o tipo de depuração da configuração definido como padrãopdbonly
.Você vai querer apenas PDB, mas não vai querer dar os arquivos PDB aos usuários. Tê-los para você, no entanto, junto com seus binários, lhe dá a capacidade de carregar despejos de memória em um depurador como o WinDbg e ver onde seu programa realmente falhou. Isso pode ser bastante útil quando seu código está travando em uma máquina à qual você não tem acesso.
A depuração completa adiciona o atributo [Debuggable] ao seu código. Isso tem um grande impacto na velocidade. Por exemplo, algumas otimizações de loop podem ser desabilitadas para tornar a etapa única mais fácil. Além disso, tem um pequeno efeito no processo JIT, pois ativa o rastreamento.
fonte
Estou no processo de escrever um manipulador de exceção não tratada e o rastreamento de pilha inclui o número da linha quando pdb-only é usado, caso contrário, recebo apenas o nome da Sub / Function quando escolho Nenhum.
Se eu não distribuir o .pdb, não obtenho o número da linha no rastreamento da pilha, mesmo com a compilação somente PDB.
Então, estou distribuindo (XCOPY implanta em uma LAN) o pdb junto com o exe do meu aplicativo VB.
fonte