J'ai un fichier .exe que j'ai compilé sur Windows. Mais quand je l'exécute de la ligne de commande, je ne vois aucune des choses que mon programme sortira à STD :: COUT OU STD :: CERR. Le programme fonctionne et continue de fonctionner même après que la ligne de commande revienne à l'invite (c'est un programme d'interface graphique et ne cesse pas avant d'appuyer sur le bouton Quit). Comment puis-je voir la sortie de mon programme? P>
J'utilise CMAKE pour créer un projet Visual Studio que je compile ensuite avec Msbuild. P>
4 Réponses :
Windows ne prend pas en charge le mode double. Ce qui signifie que lorsque vous exécutez GUI, vous ne pouvez pas obtenir de sortie à votre console que vous exécutez l'application. p>
En réalité, rien n'empêche une application de console de la présentation d'une interface graphique et il est également possible pour une application d'interface graphique d'envoyer une sortie à la console, elle a été lancée à partir de - mais elle doit le faire délibérément, cela ne "va pas".
@Harry je suppose que vous présenteriez le questionneur avec une solution afin que je puisse apprendre aussi?
L'approche la plus simple consiste à reconstruire le programme comme application de console. L'option de Ce changement ne devrait pas affecter votre interface graphique, mais cela entraînera une allocation de la console si le processus n'est pas déjà associé à un. En outre, les coquilles de ligne de commande attendent généralement que les applications de console quittent avant de continuer. P> L'autre approche consiste à appeler additionnel p> p> Selon une recherche Google, vous pouvez construire le programme en tant que Application de la console En ajoutant la ligne suivante à votre code source: p> C'est probablement la solution la plus facile. Vous pouvez le mettre dans un bloc Voir aussi CLAKE: Comment utiliser DIFFÉRENTE Add_Executable pour la construction de débogage? P> P> link.exe code> doit être
/ Subsystème: console code> au lieu de
/ Sous-système: Windows code>; Vraisemblablement, il existe une manière simple de spécifier cela dans CMAKE.
ALLOCCONSOLE code>
Pour créer explicitement une nouvelle console ou ATTACHCONSOLE CODE>
Si vous souhaitez utiliser un existant. Ou, bien sûr, vous pouvez envoyer la sortie à un fichier journal. P> #if code> si vous voulez seulement la console pour les constructions de débogage. P>
Où puis-je spécifier l'option / sous-système: console? Est-ce dans mon fichier .sln?
La réponse de Harry Johnston est sur place si vous souhaitez de manière permanente em> modifier votre application à Affichez cette information. Je recommanderais cette dernière approche qu'il suggère, car la commutation de votre application pour cibler le sous-système de console le fera de la toujours em> allouer et d'afficher une fenêtre de console au démarrage, même si vous ne le souhaitez pas. < / p>
Cependant, je remarque que vous avez mentionné que vous souhaitez afficher une sortie de Si vous souhaitez utiliser cette configuration avec des modifications minimales à votre base de code existante, vous pouvez réaffecter la sortie des flux tels que std :: cerr code>, ce qui implique que vous ne seriez peut-être pas intéressé par ces informations à des fins de débogage. Dans ce cas, ma recommandation serait d'appeler le
OutputDebugString code> fonction
au lieu de la sortie de std :: cout code> ou
std :: cerr code>. Ensuite, vous pouvez utiliser un petit utilitaire comme DEBUGVIEW pour surveiller la sortie de débogage de ton application. Tout ce qu'il envoie à la fonction
de sortie code> sera affiché dans la fenêtre DebugView. P>
std :: cout code> et
std :: cerr code > Pour le débogueur, comme si vous aviez appelé la fonction
de la sortie code>. Conseils sur la façon de faire cela peut être trouvé dans les réponses à Cette question < / a> et dans Ce blog post . P>
Un moyen de voir la sortie est à exécuter: puis surveille ce fichier pour la sortie. Ou utilisez un tuyau pour la voir: p> pour surveiller également la sortie d'erreur que vous pouvez utiliser p> je l'ai compris Sur la base de la documentation par Microsoft qui laisse beaucoup à l'imagination et de la
Des exemples beaucoup plus pratiques ici et ici < /a>. C'est Aide à voir "Cachée" STDOUT et STDERR Messages de mes applications Windows (et d'autres personnes). Il est intéressant de voir quels messages ont été laissés dans certains programmes, mais ne sont généralement pas vus. P> p>
Je suis depuis plus entièrement basculé pour utiliser Linux. Cependant, j'aimerais ajouter que Pycharas est un programme d'interface graphique facilement disponible qui dépit beaucoup de production s'il est exécuté à l'invite du terminal / de la commande qui ne serait pas vu si vous cliquez simplement dessus.