Écriture dans la fenêtre de sortie de Visual Studio


607

J'essaie d'écrire un message dans la fenêtre de sortie à des fins de débogage. J'ai cherché une fonction comme Java system.out.println(""). J'ai essayé Debug.Write, Console.Writeet Trace.Write. Il ne donne pas d'erreur, mais il n'imprime rien non plus.

Les options "Définir la constante DEBUG" et "Définir la constante TRACE" sont cochées.

Menu OutilsOptions de → Debugging« Rediriger tout le texte de la fenêtre de sortie à la fenêtre immédiate » n'est pas cochée.

Configuration: active (débogage)

Remarque: J'ai créé un projet avec l'assistant en tant que "Application Windows Forms" le cas échéant. Je ne sais pas où chercher.


32
essayez d'utiliserDebug.WriteLine()
Nikson Kanti Paul

9
Comme il s'agit d'un ancien article, je vais ajouter ceci en tant que commentaire pour ceux qui tombent sur la question. Au lieu de modifier réellement le code, vous pouvez également utiliser des points d'arrêt spéciaux appelés points de trace. Voir la documentation MSDN
Wonko the Sane

13
Juste un rappel que Debug.WriteLine () ne fonctionnera que lors de l'exécution dans Debug. Cela signifie l'exécuter avec F5 et non CTRL-F5. C'est facile à manquer.
kirk.burleson

3
C'est vrai, mais un outil pratique est DebugView qui affiche toutes les sorties dans le flux de débogage lors de l'exécution en dehors du débogueur
the_mandrill

2
Si vous essayez d'écrire la sortie d'un test unitaire exécuté sous le framework de test Visual Studio, les règles sont un peu différentes, consultez cette réponse pour plus de détails.
yoyo

Réponses:


754

Ajoutez l' System.Diagnosticsespace de noms, puis vous pouvez utiliser Debug.WriteLine()pour imprimer rapidement un message dans la fenêtre de sortie de l'EDI. Pour plus de détails, veuillez vous référer à ceux-ci:


2
Je vous remercie. Je suppose qu'il n'y a aucun moyen d'écrire sur la sortie si je démarre sans débogage (ctrl-f5) non?
previous_developer

1
Je suppose que vous recherchez ceci: stackoverflow.com/questions/562590/…
Bhargav Bhat

Merci encore mais cela ne fonctionne pas pour moi. Trace n'imprime pas sans mode de débogage même si la constante TRACE est définie.
previous_developer

Je viens de lancer une petite application ici, ça marche bien pour moi. Peut-être qu'il y a un petit problème dans votre environnement?
Bhargav Bhat

1
Ceci est mon code de test; pastebin.com/b7P0bYEa C'est assez simple mais toujours rien. Je vais l'essayer sur un autre système.
previous_developer

154

Cela écrira dans la fenêtre de sortie de débogage:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

6
Pour moi, ce "sorties" à la fenêtre immédiate
nuander

J'ai essayé ceci sur un ensemble de tests unitaires. J'ai débogué le test sélectionné, mais il n'y avait rien de ce que j'ai essayé d'imprimer dans la fenêtre de débogage.
Frank H.

Cependant, cela ne s'affiche dans la fenêtre de débogage qu'après avoir fermé la page Web. Je voudrais un affichage immédiat lorsque j'exécute le code. Attendez une minute - j'ai trouvé que la fenêtre de sortie est cachée pendant l'exécution du code. Si j'affiche la fenêtre, ma sortie est là.
Joe Cotton

Pouvons-nous garder un journal de ce message qui est imprimé dans la fenêtre de débogage? ou Visual Studio fournit-il un moyen d'accéder aux journaux de la fenêtre de débogage ..?
Anmol Rathod

82

Utilisation:

System.Diagnostics.Debug.WriteLine("your message here");

55
Debug.WriteLine

est ce que vous recherchez.

Sinon, essayez de faire ceci:

Outils de menu → OptionsDébogage → décochez Envoyer la sortie à l'immédiat .


1
Peut-être que Debug.Write () n'insère pas le retour chariot, donc les messages sont mis en mémoire tampon?
Guy Starbuck

2
Je ne voyais pas Debug.WriteLine ("String") avant d'avoir fait ce que Micah avait dit. Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366

3
Je pense que dans les versions ultérieures, la case à cocher est "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre immédiate"
Houdini Sutherland

6
dans VS 2015, cela s'appelle: "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre immédiate", juste au cas où certains devaient chercher 5 minutes pour trouver le paramètre approprié :) - Je faisais défiler vers le haut et vers le bas pour trouver une option commençant par " Envoyer ... ":)
dba

22

Pour moi, seul l' espace de noms Trace et non celui de débogage fonctionnait:

System.Diagnostics.Trace.WriteLine("message");

Je travaille dans un projet C # sous Visual Studio 2010.


2
J'utilise VS 2013 Professional et j'essaie d'obtenir la sortie d'un test unitaire en utilisant le framework de test unitaire Visual Studio. Il semble que le faisceau de test capture et redirige Debug.WriteLine mais pas Trace.WriteLine. Et vous ne verrez pas non plus la sortie Trace sauf si vous déboguez les tests (et pas seulement les exécutez).
yoyo

15

Vous cherchez peut-être

MessageBox.Show()

ou

Debug.Writeline()

8
MessageBox.Show()peut être très ennuyeux lorsque vous souhaitez écrire plusieurs valeurs à des fins de débogage.
Dementic

4
La question était «Écrire dans la fenêtre de sortie de Visual Studio?» pas à une boîte de message.
Amir Touitou

@AmirTwito Une boîte de message est une fenêtre de sortie.
ProfK

4
Oui, vous avez raison, mais la question était "Ecrire dans la fenêtre de sortie de Visual Studio?" et non à une simple boîte de message utilisant ce code: MessageBox.Show ()
Amir Touitou

4
@ProfK La fenêtre de sortie de Visual Studio est un élément GUI très spécifique du programme spécifique et MessageBox.Shown'y écrit pas.
jpmc26

9

L'appel

System.Diagnostics.Debug.WriteLine("message");

échoue lors de l'utilisation de .NET Core (V 1.0 ou 1.1).

Nous sommes censés créer et utiliser un enregistreur à partir de Microsoft.Extensions.Logging, mais ce journal apparaît uniquement dans la fenêtre de la console contextuelle dotnet.exe, pas dans la fenêtre de sortie de Visual Studio.


Donc Debug.WriteLine (), Console.WriteLine () et Trace.WriteLine () ne sortent rien dans Output for .Net Core? Est-il possible d'utiliser une sorte de journalisation simple sans avoir à écrire une Logclass? J'ai cherché dans Outils> Options> Débogage et vérifié la "Afficher la sortie de:" pour des solutions possibles.
Wouter Vanherck

4

Cela nécessite un cadre tiers, à savoir Serilog , mais je l'ai néanmoins trouvé très expérience fluide pour obtenir la sortie à un endroit où je peux le voir.

Vous devez d'abord installer l' évier Trace de Serilog . Une fois installé, vous devez configurer l'enregistreur comme ceci:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(Vous pouvez définir un niveau minimum différent ou le définir sur une valeur de configuration ou sur l'une des fonctionnalités normales de Serilog. Vous pouvez également définir le paramètre Trace enregistreur sur un niveau spécifique pour remplacer les configurations, ou comme vous le souhaitez.)

Ensuite, vous enregistrez simplement les messages normalement et ils apparaissent dans votre fenêtre de sortie:

Logger.Information("Did stuff!");

Cela ne semble pas si grave, alors laissez-moi vous expliquer quelques avantages supplémentaires. Le plus important pour moi était que je pouvais simultanément me connecter à la fois à la fenêtre de sortie et à la console :

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

Cela m'a donné une grande flexibilité en termes de consommation de sortie, sans avoir à dupliquer tous mes appels Console.Writeavec Debug.Write. Lors de l'écriture du code, je pouvais exécuter mon outil de ligne de commande dans Visual Studio sans craindre de perdre ma sortie à sa sortie. Lorsque je l'avais déployé et que je devais déboguer quelque chose (et que Visual Studio n'était pas disponible), la sortie de la console était facilement disponible pour ma consommation. Les mêmes messages peuvent également être enregistrés dans un fichier (ou tout autre type de récepteur) lorsqu'il s'exécute en tant que tâche planifiée.

L'essentiel est que l'utilisation de Serilog pour ce faire a vraiment facilité le vidage des messages vers une multitude de destinations, assurant que je pouvais toujours accéder facilement à la sortie, quelle que soit la façon dont je l'ai exécuté.

Il nécessite également une configuration et un code très minimes.


1
Serilog a désormais également un récepteur de «débogage» sur github.com/serilog/serilog-sinks-debug qui fonctionne de manière similaire, mais avec un formatage légèrement plus agréable :-) HTH!
Nicholas Blumhardt

Pourquoi ne pas rendre une méthode .net publique (peut-être statique) et y mettre tout ce dont vous avez besoin comme Console.Write ou Debug.Write etc. et l'utiliser partout?
Saulius

@Saulius "Les mêmes messages peuvent également être enregistrés dans un fichier (ou tout autre type de récepteur) lorsqu'il s'exécute en tant que tâche planifiée. L'essentiel est que l'utilisation de Serilog pour ce faire a rendu très facile le transfert de messages vers une multitude de destinations, garantissant que je pourrais toujours accéder facilement à la sortie, quelle que soit la façon dont je l'ai exécutée. "
jpmc26

1

Ce n'est pas une réponse à la question d'origine. Mais puisque j'ai trouvé cette question lors de la recherche d'un moyen de dumping interactif des données d'objet, j'ai pensé que d'autres pourraient bénéficier de mentionner cette alternative très utile.

J'ai finalement utilisé la fenêtre de commande et entré la Debug.Printcommande, comme indiqué ci-dessous. Cela a imprimé un objet mémoire dans un format qui peut être copié sous forme de texte, ce qui est tout ce dont j'avais vraiment besoin.

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"

0

Imprimer dans la fenêtre de sortie de Visual Studio:

Debug.Writeline();

0

Les éléments suivants ont fonctionné pour moi dans Visual Studio 2015:

OutputDebugStringW(L"Write this to Output window in VS14.");

Lisez la documentation de OutputDebugStringW ici .

entrez la description de l'image ici Notez que cette méthode ne fonctionne que si vous déboguez votre code ( debug mode)


11
Est-ce du C ++? La question est étiquetée c # .
jpmc26

0

À des fins de débogage, la System.Diagnostics.Debug.Writeline()commande ne sera pas compilée dans la version finale de votre code, sauf si vous disposez d'écouteurs de débogage. Il écrit dans tous les écouteurs de trace, ce qui inclut la fenêtre de sortie VS lors de l'exécution en mode débogage.

Pour une application console. Console.Writeline()fonctionnerait mais la sortie serait toujours générée dans la version finale de votre binaire.

La sortie de débogage doit également apparaître dans la fenêtre de sortie normale lors du débogage des tests; tandis que la sortie console.writeline ne le fait pas (mais peut être trouvée dans la fenêtre de sortie de test.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.