c# - Écriture dans la fenêtre de sortie de Visual Studio?


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.Write et 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 OutilsOptionsDébogage → L' option "Rediriger tout le texte de la fenêtre de sortie vers 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 n'ai aucune idée d'où regarder.



Answers






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

using System.Diagnostics;

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



Utilisation:

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



    Debug.WriteLine

est ce que vous cherchez.

Sinon, essayez ceci:

Menu OutilsOptionsDébogage → décochez Envoyer la sortie à Immédiatement .




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.




Vous cherchez peut-être

MessageBox.Show()

ou

Debug.Writeline()



L'appel

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

échoue lorsque vous travaillez avec. NET Core (V 1.0 ou 1.1).

Nous sommes supposés créer et utiliser un enregistreur à partir de Microsoft.Extensions.Logging , mais ce journal n'apparaît que dans la fenêtre de la fenêtre contextuelle dotnet.exe, pas dans la fenêtre Sortie de Visual Studio.




Cela nécessite un cadre tiers, à savoir Serilog , mais j'ai quand même trouvé que c'était une expérience très agréable pour obtenir des résultats à un endroit que je peux 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 n'importe quelle fonctionnalité Serilog normale.Vous pouvez également définir l'enregistreur de Trace à un niveau spécifique pour remplacer les configurations, ou ce que vous voulez faire.)

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

Logger.Information("Did stuff!");

Cela ne semble pas être un gros problème, alors laissez-moi vous expliquer quelques avantages supplémentaires. Le plus important pour moi était que je pouvais simultanément enregistrer à 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.Write avec 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. Quand je l'avais déployé et que j'avais besoin de 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 est exécuté en tant que tâche planifiée.

Le fait est que l'utilisation de Serilog pour cela rendait très facile le transfert de messages vers une multitude de destinations, m'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.




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

Debug.Writeline();



Ce qui suit a fonctionné pour moi dans Visual Studio 2015 :

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

Lisez la documentation de OutputDebugStringW ici .

Notez que cette méthode ne fonctionne que si vous debug mode votre code ( debug mode )




Ce n'est pas une réponse à la question originale. Mais puisque j'ai trouvé cette question lorsque je cherchais un moyen de faire un dumping interactif des données d'objets, j'ai pensé que d'autres pourraient tirer profit de cette alternative très utile.

J'ai finalement utilisé la fenêtre de commande et entré la commande Debug.Print , comme indiqué ci-dessous. Cela a imprimé un objet mémoire dans un format qui peut être copié en tant que 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"