Quelle est la différence entre Console.WriteLine () et Debug.WriteLine ()?

90

Quelle est la différence entre vs ?Console.WriteLine()Debug.WriteLine()

Zolomon
la source

Réponses:

103

Console.WriteLine écrit dans le flux de sortie standard, soit en débogage, soit en version. Debug.WriteLine écrit dans les écouteurs de trace dans les écouteurs collection , mais uniquement lors de l'exécution en débogage. Lorsque l'application est compilée dans la configuration de la version, les éléments Debug ne seront pas compilés dans le code.

Comme Debug.WriteLineécrit sur tous les écouteurs de trace de la collection Listeners , il est possible que cela puisse être généré à plusieurs endroits (fenêtre de sortie de Visual Studio, console, fichier journal, application tierce qui enregistre un écouteur (je crois que DebugView fait cela ), etc.).

Sam Holder
la source
7
Strictly DebugView surveille les messages enregistrés via l'appel natif d'API Windows OutputDebugString(et DebugPrint). Les DefaultTraceListenerécritures dans OutputDebugString, c'est pourquoi DebugView voit la sortie. msdn.microsoft.com/en-us/library/...
MarkJ
40

Console.WriteLine()est destiné aux programmes en mode console. Une fonctionnalité intéressante du processus d'hébergement de Visual Studio fait apparaître sa sortie dans la fenêtre de sortie de Visual Studio lors du débogage pour les processus qui n'ont pas de console. C'est très utile lors du débogage, mais sachez que vous devez supprimer ce code (ou l'envelopper avec un #ifdef DEBUG) lorsque vous êtes prêt à créer la version Release. Sinon, cela ajoutera une surcharge inutile à votre programme. Cela le rend moins qu'idéal pour le traçage de débogage.

Debug.WriteLine()génère des informations de traçage si vous construisez avec le DEBUG conditionnel #defined. Ce qui est activé par défaut dans la version Debug. L'endroit où la sortie aboutit peut être configuré dans le fichier app.exe.config. Si cette configuration n'est pas remplacée, .NET fournit automatiquement une instance de la classe DefaultTraceListener. Il envoie le texte Debug.WriteLine () avec la fonction API Windows OutputDebugString () au débogueur. Le débogueur Visual Studio fait apparaître cela dans la fenêtre Sortie, tout comme Console.WriteLine ().

Un avantage clair de Debug.WriteLine () est qu'il ne génère aucune surcharge dans la version Release, les appels sont effectivement supprimés. Cependant, il ne prend pas en charge le formatage composite, vous aurez besoin de String.Format () pour cela. Pour le suivi de débogage, la classe Debug doit être votre choix.

Hans Passant
la source
18

Si vous utilisez Console.WriteLine uniquement pour le débogage, vous feriez mieux d'utiliser Debug.WriteLine .

Si vous souhaitez afficher un message à votre utilisateur, vous utiliserez Console.WriteLine .

Debug.WriteLine sert uniquement à déboguer votre application. En mode version, vos instructions de débogage seront ignorées.

Une autre utilisation d'une application console consiste à tester des assemblys privés. Plutôt que l'approche traditionnelle consistant à créer une sorte de harnais de test GUI pour tester la version compilée de la DLL, vous pouvez simplement reconstruire la DLL en tant qu'application console et entrée / sortie depuis / vers la console. J'ai trouvé cette technique plus rapide que de passer du temps à créer un faisceau de test GUI.

Peter Mortensen
la source
5
"Si vous souhaitez afficher un message à votre utilisateur, vous utiliserez console.writeline." Cela pourrait dérouter certaines personnes car cela ne montrera quelque chose à l'utilisateur que s'il est exécuté dans une application console.
Matt Wilko