80 votes

Comment écrire dans la fenêtre de sortie dans Visual Studio ?

Quelle fonction dois-je utiliser pour sortir du texte dans la fenêtre "Output" de Visual Studio ?

J'ai essayé printf() mais ça n'apparaît pas.

86voto

Sorantis Points 6066

OutputDebugString le fera.

exemple de code

    void CClass::Output(const char* szFormat, ...)
{
    char szBuff[1024];
    va_list arg;
    va_start(arg, szFormat);
    _vsnprintf(szBuff, sizeof(szBuff), szFormat, arg);
    va_end(arg);

    OutputDebugString(szBuff);
}

3 votes

Il y a toujours un problème avec cela. _vsnprintf peut tronquer la chaîne formatée pour l'adapter au tampon, mais si cela se produit, la chaîne ne sera pas terminée par un nul. Voir msdn.microsoft.com/fr/us/library/1kt27hek.aspx et stackoverflow.com/questions/357068 .

0 votes

Vous utilisez le jeu de caractères multi-octets dans les options de votre compilateur. Vous devez alors utiliser les versions multi-octets de WCHAR szBuff[1024] _vsnwprintf

0 votes

Avertissement 1 avertissement C4996 : '_vsnwprintf' : Cette fonction ou variable n'est peut-être pas sûre. Pensez à utiliser _vsnwprintf_s à la place ;-)

72voto

S'il s'agit d'une sortie de débogage, alors OutputDebugString est ce que vous voulez. Une macro utile :

#define DBOUT( s )            \
{                             \
   std::ostringstream os_;    \
   os_ << s;                   \
   OutputDebugString( os_.str().c_str() );  \
}

Cela vous permet de dire des choses comme :

DBOUT( "The value of x is " << x );

Vous pouvez l'étendre en utilisant l'option __LINE__ et __FILE__ des macros pour donner encore plus d'informations.

Pour ceux qui sont dans le pays des caractères Windows et large :

#include <Windows.h>
#include <iostream>
#include <sstream>

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

20voto

Pukku Points 5571

Utilisez le OutputDebugString ou la fonction TRACE (MFC) qui vous permet de faire printf -le formatage du style :

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );    
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

0 votes

Mon compilateur dans Visual Studio ne reconnaît pas ALTTRACE2 ou ALTTRACE. Est-ce que je dois #inclure quelque chose ? Est-ce parce que ce n'est pas un projet MFC ? C'est juste du c++ pour moi.

0 votes

Je testais un ancien algorithme 3DES dans Visual Studio 2017, C++. J'ai réussi à faire fonctionner le code en remplaçant tous les "printf" par des "TRACE". Très bon résultat ! Merci !

3voto

parsley72 Points 804

Conseil utile - si vous utilisez __FILE__ et __LINE__ puis formatez votre débogage comme :

"file(line): Your output here"

alors lorsque vous cliquez sur cette ligne dans la fenêtre de sortie, Visual Studio sautera directement à cette ligne de code. Un exemple :

#include <Windows.h>
#include <iostream>
#include <sstream>

void DBOut(const char *file, const int line, const WCHAR *s)
{
    std::wostringstream os_;
    os_ << file << "(" << line << "): ";
    os_ << s;
    OutputDebugStringW(os_.str().c_str());
}

#define DBOUT(s)       DBOut(__FILE__, __LINE__, s)

J'ai écrit un article sur ce sujet sur mon blog, donc je savais toujours où je pouvais le trouver : https://windowscecleaner.blogspot.co.nz/2013/04/debug-output-tricks-for-visual-studio.html

3voto

Dmitry Sazonov Points 2276

Solution commune :

#include <iostream>

//...
std::cerr << "Text" << std::endl;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X