Rediriger stdout et stderr vers la console de débogage de sortie de Microsoft visual studio

j'utilise Microsoft visual studio pour faire C++. Je ne vois pas std::err et std::out dans la console de sortie de L'IDE. Est-il un moyen de les rediriger ?

17
demandé sur Arthur 2010-04-21 17:24:14

3 réponses

vous pouvez en effet rediriger std:: out et std:: err. Faites simplement un clic droit sur votre projet dans l'explorateur de solutions et sélectionnez Properties. Ensuite, sélectionnez Configuration Properties -> Debugging et de mettre les arguments appropriés, dans le Command Arguments champ. Par exemple, pour rediriger std::err vers un fichier, je taperais 2> ErrorLog.txt.

Les choses que vous tapez Command Arguments il suffit de les ajouter comme arguments en ligne de commande lorsque Visual Studio exécute votre programme, tout comme vous les avez tapés manuellement sur la console. Donc, ci-dessus exemple dit simplement à VisualStudio d'exécuter votre programme avec la commande <programName>.exe 2> ErrorLog.txt au lieu de <programName>.exe.

19
répondu Brandon 2016-05-09 05:43:42

je sais que c'est un vieux fil, mais je ne peux pas m'empêcher de donner la réponse car je ne peux pas croire qu'il n'y a toujours pas de vraie réponse. Ce que vous pouvez faire est de rediriger l' coutostringstream de votre choix. Pour ce faire, dériver une nouvelle classe de streambuf qui va envoyer le flux OutputDebugString (appelons cette classe OutputDebugStream) et créer une instance de la classe, myStream. Maintenant appel:

cout.rdbuf(&myStream)

j'ai utilisé cout pour un exemple. Cette même technique peut être utilisée avec eree, il suffit d'appeler

cerr.rdbuf(&myStream).  

Stdout est un peu plus difficile si vous n'utilisez pas cout. Vous pouvez rediriger stdout pendant l'exécution en utilisant freopen(), mais il doit être dans un fichier. Pour obtenir cette redirection vers L'écran de débogage est un peu plus difficile. Une façon est d'utiliser fmemopen() si elle est disponible (il n'est pas standard) et écrire un streambuf pour afficher ces données à l'écran de débogage. Alternativement, vous pouvez rediriger vers un fichier et écrire un flux pour l'ouvrir en entrée et le rediriger vers le flux de débogage. Un peu plus de travail, mais je pense que c'est possible.

6
répondu Dan 2014-03-19 21:02:29

j'utilise la macro suivante pour la sortie vers la console de visual studio

#ifdef _MSC_VER
#include <Windows.h>
#include <iostream>
#include <sstream>
#include <opencv/cxcore.h>

#define DBOUT( s )            \
{                             \
     std::wostringstream os_;    \
     os_ << s;                   \
     OutputDebugStringW( os_.str().c_str() );  \
}
#else
#define DBOUT( s )            \
{                             \
     std::cout << s;            \
}
#endif

maintenant, si je pouvais seulement le faire fonctionner avec un noyau cuda?!

0
répondu ejectamenta 2017-09-14 11:33:38