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 ?
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
.
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.
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?!