Pergunta

Por anos eu tenho vindo a utilizar o compilador DEBUG constante no VB.NET para escrever mensagens para o console.Também tenho vindo a utilizar o Sistema.O diagnóstico.Depuração.Escrever de forma semelhante.Ele sempre foi o meu entendimento de que quando o LANÇAMENTO foi usado como a opção de compilação, que todas estas declarações foram deixados de fora pelo compilador, liberando o seu código de produção da sobrecarga de instruções de depuração.Recentemente, quando trabalhar com Silverlight 2 Beta 2, notei que o Visual Studio realmente ligado a uma compilação de VERSÃO que eu estava correndo fora de um web site público e apresentado instruções de DEPURAÇÃO que eu supus que não foram compilados!Agora, a minha primeira inclinação é assumir que há algo de errado com o meu ambiente, mas eu também quero pedir a alguém com profundo conhecimento do Sistema.O diagnóstico.Depuração e compilação de DEPURAÇÃO opção em geral que eu possa ser mal-entendido aqui.

Foi útil?

Solução

O método preferido é realmente usar o condicional atributo para moldar sua depuração chamadas, nem utilizar as diretivas de compilador.#ifs pode ficar complicado e pode levar a estranha criar problemas.

Um exemplo do uso de uma condicional atributo é a seguinte (em C#, mas funciona em VB.NET demais):

[ Conditional("Debug") ]
private void WriteDebug(string debugString)
{
  // do stuff
}

Quando você compila sem o sinalizador de DEPURAÇÃO, qualquer chamada para WriteDebug será removido como foi assumido que estava acontecendo com Depuração.Write().

Outras dicas

Examine o Depuração.Escrever o método.Ele é marcado com o

[Conditional("DEBUG")]

atributo.

A ajuda do MSDN ConditionalAttribute estados:

Indica a compiladores que um método chamada ou atributo deve ser ignorado a menos que especificado condicional compilação símbolo é definido.

Se a configuração de compilação tem um rótulo de release ou debug não importa, o que importa é se o símbolo de DEPURAÇÃO está definido nele.

O que eu faço é encapsular a chamada para Depuração na minha própria classe e adicionar um pré-compilador directiva

public void Debug(string s)
{
#if DEBUG
    System.Diagnostics.Debug(...);
#endif
}

Usando o DEBUG do compilador símbolo, como você disse, na verdade, omitir o código de assembly.

Eu acredito que o Sistema.O diagnóstico.Depuração.Escrever sempre de saída para um depurador anexado, mesmo se você construiu no modo de edição.De acordo com o Artigo do MSDN:

Grava as informações sobre a depuração para o rastreamento de ouvintes Ouvintes coleção.

Se você não quiser qualquer de saída, você precisará quebrar a sua chamada para Depuração.Escrever com a DEPURAÇÃO constante como Juan disse:

#if DEBUG
    System.Diagnostics.Debug.Write(...);
#endif

Eu li o artigo, e isso me levou a acreditar que quando a DEPURAÇÃO não foi definida, de que o ConditionalAttribute declarado no Sistema.Funções de depuração faria com que o compilador para deixar de fora este código completamente.Eu assumo a mesma coisa para ser verdadeiro para RASTREAMENTO.Isto é, o Sistema.O diagnóstico.Funções de depuração deve ter ConditionalAttributes para DEPURAÇÃO e para de RASTREAMENTO.Eu estava errado em que pressuposto.O Rastreamento separado classe tem as mesmas funções, e estes definem ConditionalAttribute dependente do RASTREAMENTO constante.

Do Sistema.O diagnóstico.Depuração:_ Public Shared Sub Escrever ( _ mensagem as String _ )

Do Sistema.O diagnóstico.Rastreamento:_ Public Shared Sub WriteLine ( _ mensagem as String _ )

Parece, então, que a minha hipótese estava correta, que do Sistema.O diagnóstico.Debug (ou sistema.O diagnóstico.Trace) declarações são, na verdade, não incluídos na compilação como se eles fossem incluídos no #IF DEBUG (ou #SE TRACE) regiões.

Mas eu também aprendi aqui de vcs, e verificado, que a VERSÃO de compilação em si não tomar cuidado com isto.Pelo menos com o Silverlight projetos, que ainda estão um pouco esquisito, você precisa entrar no "Avançadas Opções de Compilação..." e certifique-se de DEPURAÇÃO não está definido.

Nós saltou de .NET 1.1/VS2003 para .NET 3.5/VS2008 então, eu acho que algumas dessas usado para o trabalho de forma diferente, mas, talvez, ele mudou de 2.0/VS2005.

Selecione se deseja que as informações de depuração para ser compilado ou para ser removido,

introduza a "Construir" no projeto da janela de propriedades.

Escolha o direito de configuração (Ativo/Release/Debug/Todos) e certifique-se de que você marque a opção "DEPURAÇÃO Constante" se você deseja a informação, ou desmarque-a se você não.

Aplicar as alterações e reconstruir

Na minha experiência de escolher entre Debug e Release em VB.NET não faz nenhuma diferença.Você pode adicionar ações personalizadas para tanto a configuração, mas, por padrão, eu acho que eles são o mesmo.

Usando o Release, certamente, não remova o Sistema.O diagnóstico.Depuração.Instruções de gravação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top