É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.

previous_developer
la source
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:

Bhargav Bhat
la source
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.");
clairvoyant
la source
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");
Luqman
la source
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 .

Micah Armantrout
la source
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.

Zac
la source
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()
dansasu11
la source
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.

Paul Gorbas
la source
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.

jpmc26
la source
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"
djabraham
la source
0

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

Debug.Writeline();
Amir Touitou
la source
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)

Mona Jalal
la source
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.)

Chris McCowan
la source