2010-04-21 6 views

Répondre

17

Vous pouvez en effet rediriger std :: out et std :: err. Faites simplement un clic droit sur votre projet dans l'explorateur de solution et sélectionnez Properties. Ensuite, sélectionnez Configuration Properties -> Debugging et placez les arguments appropriés dans le champ Command Arguments. Par exemple, pour rediriger std :: err vers un fichier, je tape 2> ErrorLog.txt. Les éléments que vous tapez Command Arguments sont simplement ajoutés en tant qu'arguments de ligne de commande lorsque Visual Studio exécute votre programme, comme vous les avez saisis manuellement dans la console. Ainsi, l'exemple ci-dessus indique simplement à VisualStudio d'exécuter votre programme avec la commande <programName>.exe 2> ErrorLog.txt au lieu de seulement <programName>.exe.

+4

Désolé mon but était de rediriger les std :: out et std :: err à la fenêtre de sortie de Visual Studio, pas à un fichier. Merci quand même – Arthur

+1

@jules Pas de problème. Mais, le titre de la question est tel que les gens qui cherchent simplement à rediriger la production pourraient finir ici aussi, donc je me suis dit que ça valait la peine de poster cette réponse aussi. – Brandon

+0

@Brandon Est-ce '> 2' ou' 2> '? – allonhadaya

6

Je sais que c'est un vieux fil mais je ne peux pas m'empêcher de donner la réponse puisque je ne peux pas croire qu'il n'y a toujours aucune vraie réponse. Ce que vous pouvez faire est de rediriger le cout vers un ostringstream de votre choix. Pour ce faire, dériver une nouvelle classe de streambuf qui envoie le flux à OutputDebugString (Appelons cette classe OutputDebugStream) et créer une instance de la classe, MyStream. Appelez dès maintenant

cout.rdbuf(&myStream) 

J'utilisé Cout pour un exemple. Cette même technique peut être utilisée avec cerr, 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 s'agir d'un fichier. Pour que cela redirige vers l'écran de débogage est un peu plus difficile. Une façon est d'utiliser fmemopen() s'il est disponible (ce n'est pas standard) et d'écrire un streambuf pour afficher ces données dans l'écran Déboguer. Vous pouvez également rediriger vers un fichier et écrire un flux à ouvrir en entrée et rediriger vers le flux de débogage. Un peu plus de travail, mais je pense que c'est possible.

0

J'utilise la macro suivante pour la sortie de 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 ne pouvais le faire fonctionner dans un noyau cuda ?!

Questions connexes