Il semble plutôt fastidieux de sortir dans la fenêtre de débogage. Où puis-je trouver la sortie cout
si j'écris une information non console?
Comme:
double i = a / b;
cout << b << endl;//I want to check out whether b is zero. It seems the output cannot be found anywhere.
Pour sortir une chaîne dans la console de débogage, utilisez OutputDebugStringA
. Voir http://msdn.Microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx
Pour afficher des valeurs de variable dans la console de débogage, à l'aide de std::ostringstream
, envoie la chaîne à OutputDebugStringA
.
Des instructions de sortie excessives entraîneront un ralentissement sévère du programme. Cependant, c'est une bonne technique pour attraper des choses avec lesquelles le débogueur a un problème, comme les membres enfants réels lors de la lecture avec des pointeurs de base.
La question est très claire. Comment utiliser std :: cout pour déboguer une application non console dans Visual Studio.
La réponse est très claire: vous ne pouvez pas. Autrement dit, Visual Studio ne prend pas en charge std :: cout comme outil de débogage pour les applications non console.
Il s'agit d'une sérieuse limitation de Visual Studio, probablement un échec à respecter même la norme C++. Je trouve très triste de voir ici des "réponses" désinformatives qui tentent de cacher ce défaut de leur précieux Visual Studio.
Pour une solution Windows, vous pouvez allouer une console et y associer cout/cin. Par exemple:
AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
Documentation:
https://msdn.Microsoft.com/en-us/library/windows/desktop/ms681944%28v=vs.85%29.aspx
SOLUTION: cette réponse résout la question et vous permet de rediriger la sortie de la console vers la fenêtre de sortie de Visual Studio. Nous avons d'abord besoin d'une classe qui remplace le flux de chaînes cout par défaut:
class dbg_stream_for_cout
: public std::stringbuf
{
public:
~dbg_stream_for_cout() { sync(); }
int sync()
{
::OutputDebugStringA(str().c_str());
str(std::string()); // Clear the string buffer
return 0;
}
};
dbg_stream_for_cout g_DebugStreamFor_cout;
Ensuite, quelque part où vous voulez "activer" l'écriture dans la fenêtre de sortie VS:
std::cout.rdbuf(&g_DebugStreamFor_cout); // Redirect std::cout to OutputDebugString!
Au lieu d'utiliser cout, créez un fichier journal et écrivez-y tout ce que vous voulez.
Modifier: utilisez ce code simple pour écrire dans un fichier journal.
ofstream log;
log.open ("log.txt");
log << "Writing this to a file.\n";
log.close();
Utilisez simplement std :: cin.get () à la fin de votre code, par exemple:
std::cout << "print this" << std::endl;
std::cin.get();
Cela force le programme à rester ouvert et à attendre la saisie de l'utilisateur.
Fonctionne pour moi de toute façon. Nous remercions TheChernoProject: https://www.youtube.com/channel/UCQ-W1KE9EYfdxhL6S4twUNw
Je voudrais donner mes 2 cents.
Étant donné que le problème est peut-être un problème de conformité avec la norme C++ ou que nous pourrions utiliser OutputDebugStringA
, si vous ne pouvez pas modifier votre base de code, vous aimerez peut-être simplement rediriger std :: cout vers autre chose, comme un fichier.
Donc, sans changer votre base de code, vous pouvez faire quelque chose comme suggéré ici: Comment rediriger cin et cout vers des fichiers?
Condensé:
#include <fstream>
std::ofstream out("out.txt"); std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
std :: cout.rdbuf (coutbuf); // réinitialiser à nouveau la sortie standard
J'espère que cela peut aider quelqu'un, bravo à Nawaz qui a fourni la réponse dans l'autre fil.