Lors de l'exécution d'une application console en Java avec Eclipse, je vois que la sortie est placée dans une zone de texte dans le IDE lui-même, au lieu de faire apparaître une console comme dans Visual Studio. Cela est pratique, car même après la sortie du programme, je peux toujours utiliser le texte qui y était écrit, car il ne sera pas effacé tant que je ne l'aurai pas exécuté à nouveau. Est-il possible de réaliser quelque chose comme ça avec Visual Studio? Je sais qu'au lieu de faire
System.Console.WriteLine(str);
Je peux faire
System.Diagnostics.Debug.WriteLine(str);
mais ce n'est pas tout à fait la même chose, car vous obtenez beaucoup de "déchets" dans la fenêtre de sortie, comme tous les symboles chargés et autres.
Mieux encore, est-il possible d’avoir tout fait dans le IDE lui-même, lorsque vous exécutez votre application, au lieu d’exécuter la console?
Dans la boîte de dialogue Outils -> Options Visual Studio -> Débogage -> Cochez la case "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate".
Dans le Visual Studio Options Dialog -> Débogage -> Cochez la case "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate". Ensuite, allez dans les paramètres de votre projet et changez le type de "Application console" en "Application Windows". À ce stade, Visual Studio n'ouvre plus de fenêtre de console et la sortie est redirigée vers la fenêtre de sortie de Visual Studio. Cependant, vous ne pouvez rien faire de "créatif", comme demander une saisie de clé ou de texte ou effacer la console - vous obtiendrez des exceptions d'exécution.
Utilisez System.Diagnostics.Trace
Selon les écouteurs que vous attachez, la sortie de trace peut aller à la fois à la fenêtre de débogage, à la console, à un fichier, à une base de données ou à une base de données. Les possibilités sont littéralement infinies, car mettre en œuvre votre propre TraceListener est extrêmement simple.
Ce n’est pas tout à fait pareil, mais lisez le blog Le saviez-vous… vous pouvez afficher le texte de votre outil externe dans la fenêtre de sortie? - # 204.
Vous pouvez créer une application wrapper que vous exécutez au lieu d'exécuter directement votre application réelle. L'application wrapper peut écouter stdout et tout rediriger vers Trace. Modifiez ensuite les paramètres d'exécution pour lancer votre wrapper et indiquez le chemin d'accès à l'application réelle à exécuter.
Le wrapper peut également associer automatiquement le débogueur au nouveau processus si un débogueur est attaché au wrapper.
Il est temps de vérifier la dernière version/s pour Visual Studio, les gens. La solution la plus suggérée qui ne fonctionnait pas pour certains d’entre vous pourrait peut-être fonctionner maintenant.
Dans Visual Studio 2017 (Version 15.4.2 et versions ultérieures), le passage à Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window
a fonctionné pour moi.
Quelques notes: 1. Pour voir la fenêtre Immediate, assurez-vous que vous êtes en mode Debugging. 2. Il devrait maintenant y avoir 3 autres outils de débogage disponibles, à savoir, Pile d'appels, Points d'arrêt et Fenêtre de commande, comme indiqué ci-dessous:
Meilleurs vœux!
Une solution simple qui fonctionne pour moi, pour utiliser la capacité de la console (ReadKey, String avec Format et arg, etc.) et pour voir et sauvegarder le résultat:
J'écris TextWriter qui écris à Console
et à Trace
et remplace le Console.Out
par celui-ci.
si vous utilisez Dialogue -> Débogage -> Cochez la case "Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate", vous obtenez le résultat dans la fenêtre Immédiat et assez net.
mon code: au début de mon code:
Console.SetOut(new TextHelper());
et la classe:
public class TextHelper : TextWriter
{
TextWriter console;
public TextHelper() {
console = Console.Out;
}
public override Encoding Encoding { get { return this.console.Encoding; } }
public override void WriteLine(string format, params object[] arg)
{
string s = string.Format(format, arg);
WriteLine(s);
}
public override void Write(object value)
{
console.Write(value);
System.Diagnostics.Trace.Write(value);
}
public override void WriteLine(object value)
{
Write(value);
Write("\n");
}
public override void WriteLine(string value)
{
console.WriteLine(value);
System.Diagnostics.Trace.WriteLine(value);
}
}
Remarque: je remplace tout ce dont j'avais besoin, donc si vous écrivez d'autres types, vous devez remplacer davantage
Au lieu de cela, vous pouvez collecter la sortie dans un résultat de test.
Vous ne pouvez pas fournir d'entrée, mais vous pouvez facilement fournir plusieurs tests avec des arguments de ligne de commande différents, chaque test recueillant la sortie.
Si votre objectif est le débogage, il s'agit d'un moyen peu pénible d'offrir un scénario de débogage reproductible.
namespace Commandline.Test
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CommandlineTests
{
[TestMethod]
public void RunNoArguments()
{
Commandline.Program.Main(new string[0]);
}
}
}
Je sais que ceci est juste une autre réponse, mais je pensais écrire quelque chose pour les nouveaux développeurs Web, qui pourraient être déroutés par la partie "Changer en une application Windows", parce que je pense par défaut une application MVC dans Visual Studio 2013. La valeur par défaut est un type de sortie de la bibliothèque de classes.
Mon application Web est définie par défaut comme type de sortie "Bibliothèque de classes". Tu n'as pas à changer ça. Tout ce que je devais faire était de suivre les suggestions d'aller dans Outils> Options> Débogage> Rediriger tout le texte de la fenêtre de sortie vers la fenêtre Immédiate. J'ai ensuite utilisé la suggestion System.Diagnostics.Trace
de Joel Coehoorn ci-dessus.