484 votes

C# if/then directives pour débogage vs libérer

Dans Propriétés de la Solution, j’ai Configuration à « libérer » pour mon seul et seulement du projet.

Au début de la routine principale, j’ai ce code, et c’est de montrer « Mode = Debug ». J’ai aussi ces deux lignes tout en haut :

J’ai teste la variable droite ?

Mon but est de définir les différentes valeurs par défaut des variables selon le mode debug vs communiqué.

793voto

psychotik Points 11937

Supprimer le `` dans votre code. Préprocesseurs définies dans la configuration de génération pour cette build spécifique (DEBUG/_DEBUG devrait être défini dans VS déjà).

La raison pour laquelle il imprime « Mode = Debug » est à cause de votre et puis passe le .

En outre, la bonne façon de vérifier est :

Ne cochez pas pour diffusion immédiate

324voto

Mehrdad Afshari Points 204872

Par défaut, Visual Studio définit DEBUG si le projet est compilé en mode Debug et ne définissent pas si c'est en mode Release. De sortie n'est pas définie dans la Version par défaut, le mode. Utiliser quelque chose comme ceci:

#if DEBUG
  // debug stuff goes here
#else
  // release stuff goes here
#endif

Si vous voulez faire quelque chose uniquement en mode de lancement:

#if !DEBUG
  // release...
#endif

Aussi, il est important de souligner que vous pouvez utiliser [Conditional("DEBUG")] d'attribut sur les méthodes qui retournent void pour les avoir exécuté seulement si un certain symbole est défini. Le compilateur seraient supprimer tous les appels à ces méthodes si le symbole n'est pas définie:

[Conditional("DEBUG")]
void PrintLog() {
    Console.WriteLine("Debug info");
}

void Test() {
    PrintLog();
}

238voto

Joel Coehoorn Points 190579

Je préfère vérifier comme ce vs cherchez #defines :

Avec l’avertissement que bien sûr vous pouvez compiler et déployer quelque chose en mode debug mais pas encore le débogueur attaché.

58voto

Tod Thomson Points 1145

Je ne suis pas un grand fan des trucs #if, surtout si vous étalez tout autour de votre base de code car il vous donnera des problèmes où Debug s’appuie pass, mais versions Release échouer si vous ne faites pas attention.

Voici donc ce que je suis venu avec (inspiré par #ifdef dans c#) :

21voto

Matthew Whited Points 12255

Si vous essayez d'utiliser la variable définie pour le type de construction, vous devez supprimer les deux lignes ...

#define DEBUG  
#define RELEASE 

... ce sera la cause de la #if (DEBUG) pour être toujours vrai.

Il n'y a pas un défaut de compilation Conditionnelle symbole de la LIBÉRATION. Si vous souhaitez définir un aller les propriétés du projet, cliquez sur le Construire , puis ajouter de la LIBÉRATION pour les symboles de compilation Conditionnelle zone de texte sous le Général à la tête.

L'autre option serait de le faire...

#if DEBUG
    Console.WriteLine("Debug");
#else
    Console.WriteLine("Release");
#endif

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X