Question

Pendant des années j'ai été en utilisant le compilateur DEBUG constante dans VB.NET écrire des messages à la console.J'ai aussi été en utilisant le Système.Diagnostics.Debug.Écrire de manière similaire.Ça a toujours été ma compréhension que lors de la RELEASE a été utilisé comme option de compilation, que toutes ces déclarations ont été laissés de côté par le compilateur, ce qui libère votre code de production de la surcharge des instructions de débogage.Récemment, lorsque l'on travaille avec Silverlight 2 Beta 2, j'ai remarqué que Visual Studio réellement attaché à une version RELEASE que j'ai été en cours d'exécution hors d'un site web public et affiche des instructions de DÉBOGAGE qui je suppose n'étaient même pas compilé!Maintenant, mon premier réflexe est de supposer que qu'il ya quelque chose de mal avec mon environnement, mais je veux aussi demander à quelqu'un ayant une connaissance approfondie sur le Système.Diagnostics.Débogage et la version de DÉBOGAGE de l'option en général ce que j'ai peut-être un malentendu ici.

Était-ce utile?

La solution

La méthode préférée consiste à utiliser le conditionnel attribut pour envelopper votre debug appels, de ne pas utiliser les directives du compilateur.#fi peut être délicat et peut conduire à bizarre problèmes de compilation.

Un exemple d'utilisation d'un attribut conditionnel est comme suit (en C#, mais il fonctionne VB.NET trop):

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

Lorsque vous compilez sans l'indicateur de DÉBOGAGE ensemble, tout appel à WriteDebug sera supprimé comme l'a supposé qui se passait avec Debug.Write().

Autres conseils

Examiner les Debug.Écrire la méthode.Il est marqué par l'

[Conditional("DEBUG")]

attribut.

L'aide de MSDN pour ConditionalAttribute membres:

Indique pour les compilateurs qu'une méthode appel ou d'un attribut doit être ignorée sauf si spécifié conditionnel compilation symbole est défini.

Si la configuration de build a une étiquette de release ou debug n'a pas d'importance, ce qui importe est de savoir si les symboles de DÉBOGAGE est défini.

Ce que je fais est d'encapsuler l'appel de Débogage dans ma propre classe et ajouter un précompilateur directive

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

En utilisant le compilateur DEBUG symbole, comme vous l'avez dit, en fait omettre le code de l'assemblée.

Je crois que Système.Diagnostics.Debug.Écrire toujours la sortie d'un débogueur attaché, même si vous avez construit en mode Release.Par la Article MSDN:

Écrit les informations sur le débogage à la trace les auditeurs les Auditeurs de la collection.

Si vous ne voulez pas tout sortie, vous aurez besoin d'envelopper votre appel à Déboguer.Écrire avec le DEBUG constante comme Juan a dit:

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

J'ai lu l'article trop, et elle m'a amené à croire que, quand DEBUG n'a pas été défini, que le ConditionalAttribute déclaré sur le Système.Fonctions de Debug serait la cause de la compilateur de laisser ce code complètement.Je suppose la même chose pour être vrai à l'état de TRACE.C'est le Système.Diagnostics.Fonctions de débogage doit avoir ConditionalAttributes pour DEBUG et TRACE.J'étais mal dans cette hypothèse.La Trace séparée de la classe ont les mêmes fonctions, et elles définissent ConditionalAttribute dépend de la TRACE constante.

À Partir Du Système.Diagnostics.Debug:_ Public Shared Sub Écrire ( _ message as String _ )

À Partir Du Système.Diagnostics.Trace:_ Public Shared Sub WriteLine ( _ message as String _ )

Il semble alors que mon hypothèse était correcte, ce Système.Diagnostics.Debug (ou d'un système.Diagnostics.Trace) les instructions sont en fait pas inclus dans la compilation comme si elles étaient incluses dans #if DEBUG (ou #SI la TRACE) des régions.

Mais j'ai également appris ici de vous les gars, et vérifié que la version RELEASE n'a pas, en soi, prendre soin de cela.Au moins avec Silverlight projets, qui sont encore un peu feuilletée, vous avez besoin pour entrer dans le "Advanced Options de Compilation..." et assurez-vous que le DÉBOGAGE est pas défini.

Nous avons sauté de .NET 1.1/VS2003 pour .NET 3.5/VS2008 donc je pense qu'une partie de cette habitude de travailler différemment, mais peut-être qu'il a changé en 2.0/VS2005.

Pour sélectionner si vous souhaitez que les informations de débogage pour être compilé ou d'être supprimé,

entrez dans la "Construction" de l'onglet dans les propriétés du projet fenêtre.

Choisir la bonne configuration (Actif/Release/Debug/Tous) et assurez-vous que vous cochez la case "DÉBOGAGE Constante" si vous voulez de l'info, ou décochez la case si vous ne le faites pas.

Appliquer les modifications et reconstruire

Dans mon expérience, le choix entre Debug et Release en VB.NET ne fait aucune différence.Vous pouvez ajouter des actions personnalisées à la fois de la configuration, mais par défaut, je pense qu'ils sont les mêmes.

À l'aide de la Libération ne sera certainement pas de supprimer le Système.Diagnostics.Debug.Instructions d'écriture.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top