6
votes

Voir STD :: COUT DE .EXE

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?

J'utilise CMAKE pour créer un projet Visual Studio que je compile ensuite avec Msbuild.


0 commentaires

4 Réponses :


0
votes

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.


2 commentaires

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?



5
votes

L'approche la plus simple consiste à reconstruire le programme comme application de console. L'option de link.exe doit être / Subsystème: console au lieu de / Sous-système: Windows ; Vraisemblablement, il existe une manière simple de spécifier cela dans CMAKE.

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.

L'autre approche consiste à appeler ALLOCCONSOLE Pour créer explicitement une nouvelle console ou ATTACHCONSOLE Si vous souhaitez utiliser un existant. Ou, bien sûr, vous pouvez envoyer la sortie à un fichier journal.

additionnel

Selon une recherche Google, vous pouvez construire le programme en tant que Application de la console En ajoutant la ligne suivante à votre code source: xxx

C'est probablement la solution la plus facile. Vous pouvez le mettre dans un bloc #if si vous voulez seulement la console pour les constructions de débogage.

Voir aussi CLAKE: Comment utiliser DIFFÉRENTE Add_Executable pour la construction de débogage?


1 commentaires

Où puis-je spécifier l'option / sous-système: console? Est-ce dans mon fichier .sln?



5
votes

La réponse de Harry Johnston est sur place si vous souhaitez de manière permanente 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 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 std :: cerr , 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 fonction au lieu de la sortie de std :: cout ou std :: cerr . 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 sera affiché dans la fenêtre DebugView.

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 :: cout et std :: cerr Pour le débogueur, comme si vous aviez appelé la fonction de la sortie . Conseils sur la façon de faire cela peut être trouvé dans les réponses à Cette question < / a> et dans Ce blog post .


0 commentaires