Need.NET code à exécuter uniquement en configuration de débogage

j'ai un code qui donne accès à une API sur le web. Un des paramètres de L'API me permet de leur faire savoir que je suis en train de tester.

je voudrais seulement mettre ce paramètre dans mon code quand je suis en train de tester. Actuellement, je commente juste le code quand je fais une construction de version.

y a-t-il un moyen automatique de faire cela basé sur la configuration de construction?

31
demandé sur Dariusz Woźniak 2010-08-05 00:33:42
la source

8 ответов

Solutions

vous pouvez utiliser l'un des suivants -

1: Conditional attribut

l'attribut Conditional indique aux compilateurs qu'un appel de méthode ou un attribut doit être ignoré à moins qu'un symbole de compilation conditionnelle spécifié ne soit défini.

exemple de Code:

[Conditional("DEBUG")]
static void Method() { } 

2: #if directive préprocesseur

quand le compilateur rencontre un #if préprocesseur de la directive , suivie éventuellement d'une directive #endif, elle compile le code entre les directives uniquement si le symbole spécifié est défini. Contrairement à C et c++, vous ne pouvez pas assigner une valeur numérique à un symbole. L'instruction # if en C# est booléenne et teste seulement si le symbole a été défini ou non.

Exemple de Code

:

#if DEBUG
    static int testCounter = 0;
#endif 

3: Debug.Write méthodes

Debug.Write (et Debug.WriteLine ) écrit des informations sur le débogage aux auditeurs de trace dans le auditeurs collection.

Voir aussi Debug.WriteIf et Debug.WriteLineIf .

exemple de Code:

Debug.Write("Something to write in Output window.");

Notes

méfiez-vous de l'utilisation de la directive #if car elle peut produire des situations involontaires dans la construction de la version. Par exemple, voir:

    string sth = null;
#if DEBUG
    sth = "oh, hi!";
#endif
    Console.WriteLine(sth);

dans ce cas, la construction sans débogage affichera un message en blanc.

lire la suite""

Voir aussi

il y a aussi un outil, DebugView , qui permet de capturer des informations de débogage à partir d'applications externes.

76
répondu Dariusz Woźniak 2018-08-22 23:57:37
la source

Oui, emballez le code dans

#if DEBUG
// do debug only stuff 
#else
// do non DEBUG stuff
#endif

Google "C# symboles de la compilation"

Visual Studio définit automatiquement DEBUG lorsque vous êtes dans la configuration de débogage. Vous pouvez définir tous les symboles que vous voulez (regardez les propriétés de votre projet, l'onglet Construire). Attention, abuser des directives préprocesseur est une mauvaise idée, cela peut conduire à un code qui est très difficile à lire/maintenir.

31
répondu Matt Greer 2010-08-05 00:35:33
la source

j'ai eu ce même problème et la solution que j'ai utilisé est:

if (System.Diagnostics.Debugger.IsAttached)
{
    // Code here
}

cela signifie que techniquement dans la production vous pouvez attacher un débogueur et obtenir ce morceau de code pour exécuter.

9
répondu James Hulse 2010-08-05 01:20:15
la source

en plus des directives #if #endif, vous pouvez également utiliser des attributs conditionnels. Si vous marquez une méthode avec l'attribut

[Conditional("Debug")]

il ne sera compilé et exécuté que lorsque votre application sera construite en mode de débogage. Comme indiqué dans le commentaire ci-dessous, ces méthodes ne fonctionnent que lorsque la méthode a un type de retour de vide.

7
répondu George Johnston 2010-08-05 00:37:42
la source
public int Method ()
{
#if DEBUG 
   // do something 
#endif
}
2
répondu David_001 2010-08-05 00:36:14
la source

voici un autre message avec un résultat similaire: http://www.bigresource.com/Tracker/Track-vb-lwDKSoETwZ /

une meilleure explication peut être vue à: http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

// preprocessor_if.cs
#define DEBUG
#define MYTEST
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !MYTEST)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
        Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
        Console.WriteLine("DEBUG and MYTEST are defined");
#else
        Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
    }
}
2
répondu Edward Leno 2010-08-05 00:44:33
la source

ne présente pas de danger d'utilisation:

var isDebug = false;
#if DEBUG
    isDebug = System.Diagnostics.Debugger.IsAttached;
#endif

if (isDebug) {
    // Do something
}
1
répondu Jason Williams 2015-05-18 17:30:05
la source

cela fonctionne en asp.net:

if (System.Web.HttpContext.Current.IsDebuggingEnabled)
    //send email to developer;
else
    //send email to customer;

from Rick Strahl @ Detecting-ASPNET-Debug-mode

0
répondu JerryOL 2017-11-17 02:39:40
la source

Autres questions sur c# .net visual-studio vb.net debugging